###前提・実現したいこと
monacaとOnsenUIを使って同一ディレクトリから取り出したtextをチェックボックスに入れてチェックした値をサーバーに渡すというプログラムを作っていますが、サーバーに渡す部分で詰まってしまいました。
ソースコードを乗せましたのでおかしなところを指摘していただけないでしょうか。
よろしくおねがいします。
当方、PHP、Ajaxをほとんど触ったことがないためわかりやすい解説をお願いします。
###発生している問題・エラーメッセージ
XMLHttpRequest.status:200
XMLHttpRequest.responseText:OK
textStatus:textStatus:parsererror → phpの戻り値がjson形式になっていなかったことが原因
errorThrown:SyntaxError:Unexpected token O
errorThrown:OK
###ソースコード
HTML
1<!DOCTYPE HTML> 2<html ng-csp> 3<head> 4<meta charset="utf-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 6<meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> 7<script src="components/loader.js"></script> 8<script src="js/winstore-jscompat.js"></script> 9<link rel="stylesshet" href="components/monaca-onsenui/js/angular/angular-csp.css"> 10<link rel="stylesheet" href="components/loader.css"> 11<link rel="stylesheet" href="css/style.css"> 12<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min/js"></script> 13<meta http-equiv="Content-Security-Policy" content="default-src *; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> 14<script> 15 16ons.bootstrap(); 17 18ons.ready(function getTxt(event){ 19 20 $.ajax("load.txt", { 21 async: true, 22 cache:false, 23 success: function(data, status, jqXHR){ 24 25 var data_array = data.split(/\r\n|\r|\n/); 26 var len = data_array.length; 27 28 $("output:first").text(data); 29 30 $('#hoge').empty(); 31 32 for(var i=0; i<len; i++){ 33 $('<label class="checkbox checkbox--list-item" ><input type="checkbox" name="checkbox"value="' + data_array[i] + '"/><div class="checkbox__checkmark checkbox--list-item__checkmark"></div>' + data_array[i] + '</label>').appendTo('#hoge'); 34 } 35 36 } 37 }); 38}); 39 40function chkvalue(){ 41 42 //チェックボックスのデータ取得 43 44 var chkVal = []; 45 $('[name="checkbox"]:checked').each(function(){ 46 chkVal.push($(this).val()); 47 }); 48 49 var data = {'recuest':JSON.stringify(chkVal)}; 50 51 $.ajax({ 52 type:"post", 53 url:"/php/sample/send.php", 54 data:data, 55 crossDomain: true, 56 dataType:"json", 57 scriptCharset: "utf-8", 58 success:function(data){ 59 alert(data.text) 60 }, 61 error: function(XMLHttpRequest, textStatus, errorThrown){ 62 alert("XMLHttpRequest.status:"+XMLHttpRequest.status); 63 alert("XMLHttpRequest.responseText:"+XMLHttpRequest.responseText); 64 alert("textStatus:"+textStatus); 65 alert("errorThrown:"+errorThrown); 66 } 67 }); 68} 69 70</script> 71</head> 72<body> 73 74 <div style="text-align: center" class="check"> 75 76 <!-- 取得したテキストの表示 --><br /> 77 <output></output><br /><br /> 78 79 <!-- チェックボックスの表示 --> 80 <ons-list> 81 82 <ons-list-header>CheckBox</ons-list-header> 83 84 <ons-list-item modifier="tappable"> 85 <li id="hoge"></li> 86 </ons-list-item> 87 88 </ons-list> 89 90 <!-- ボタン表示 --> 91 <ons-button onclick="chkvalue()">Click to Check</ons-button> 92 </div> 93 94 </ons-page> 95 </ons-navigator> 96 </div> 97 </ons-sliding-menu> 98 99</body> 100</html>
PHP
1<?php 2 3header("Content-type: application/json; charset=utf-8"); 4if(isset($_POST['request'])){ 5 echo json_encode("OK"); 6} 7else{ 8 echo 'The parameter of "request" is not found.'; 9} 10 11?>
###補足情報(言語/FW/ツール等のバージョンなど)
liplyさんのおっしゃったとおりチェックしていった結果クロスドメイン制約に引っかかっていたためサーバーと通信できていませんでした。
なので新しくサーバーを都合したところXMLHttpRequest.status:200となり、通信することができました。
ですがtextStatusとerrorThrownがエラーになってしまい、textStatusのほうは自力で解決できたのですが、errorThrownのほうが解決できません。
もう一度お力をお貸ししていただけないでしょうか・・・
よろしくお願いします。
errorThrown:SyntaxError:Unexpected token O
回答4件
あなたの回答
tips
プレビュー