私は次のようなjquery ajaxリクエストを持っています。
$.ajax({
type: 'POST',
url: 'processor.php',
data: 'data1=testdata1&data2=testdata2&data3=testdata3',
cache: false,
success: function(result) {
if(result){
alert(result);
}else{
alert("error");
}
}
});
ハンドラprocessor.php
は次のような配列を返すように設定されています。
$array = array("a","b","c","d");
echo $array;
これを踏まえてクライアントサイドでアクションを起こしていきたい。 array [0]が 'b'の場合、「こんにちは」に警告したいとします。繰り返しますが、array [2]が「x」の場合は、「こんにちは」と警告します。データを取得するために配列要素をフィルタリングするにはどうすればよいですか?
次のようにjson形式でエンコードされた配列を返す必要があります
$array = array("a","b","c","d");
echo json_encode($array);
次に、JavaScriptでアクセスして、配列/オブジェクトに戻すことができます
var result = eval(retuned_value);
Forループを使用してすべての配列要素をナビゲートすることもできます
for (var index in result){
// you can show both index and value to know how the array is indexed in javascript (but it should be the same way it was in the php script)
alert("index:" + index + "\n value" + result[index]);
}
コードでは次のようになります。
$array = array("a","b","c","d");
echo json_encode( $array );
$.ajax({
type: 'POST',
url: 'processor.php',
data: 'data1=testdata1&data2=testdata2&data3=testdata3',
cache: false,
success: function(result) {
if(result){
resultObj = eval (result);
alert( resultObj );
}else{
alert("error");
}
}
});
PhpからJSONを返す http://php.net/manual/en/function.json-encode.php
そしてJavaScriptでjson文字列からオブジェクトを作成する場合、ajaxの代わりにgetJSONを使用してこれを行うことができます http://api.jquery.com/jQuery.getJSON/
PHPが正しい応答ヘッダーを設定していることを確認します。
header ("content-type: application/json; charset=utf-8");
私はphpからAjax(jscript)に配列を返す最良の方法を見つけます:
pHP側:echo json_encode($myArray);
JavaScript側(例:_myAjax.responseText
_)replyVal = JSON.parse(myAjax.responseText);
JavaScriptからphpに配列を送信するには、一致するJSON.stringify()
を使用して送信し、php json_decode()
を使用して受信します
PHPコードでは、配列をJSONオブジェクトとしてエンコードします
echo json_encode($array);
次に、JSONオブジェクトをJavascript/jQuery互換オブジェクトに変換する必要があります。その後、配列に戻すことができます
$.ajax({
success: function(result) {
jq_json_obj = $.parseJSON(result); //Convert the JSON object to jQuery-compatible
if(typeof jq_json_obj == 'object'){ //Test if variable is a [JSON] object
jq_obj = eval (jq_json_obj);
//Convert back to an array
jq_array = [];
for(elem in jq_obj){
jq_array.Push(jq_obj[elem]);
}
console.log(jq_array);
}else{
console.log("Error occurred!");
}
}
});