JQuery $ .post()リクエストからJSONレスポンスを適切に読み取る方法を理解するのに問題があります。
以下のjQueryコードでは、キーとして使用する対応する「color_entry_id」に基づいて、DOMの要素から文字列の連想配列を作成します。
var image_links = {};
$(this).find('input[name="color_id"]').each(function() {
var color_entry_id = $(this).val();
var image_link = $(this).parent().find('input[name="edit_image"].' + color_entry_id).val();
image_links[color_entry_id] = image_link;
});
次に、POSTリクエストを作成し、「image_links」の配列を送信します。
$.post(
"test.php",
{ id: product_id, "images[]": jQuery.makeArray(image_links) },
function(data) {
var response = jQuery.parseJSON(data);
$.each(response.images, function(index, item) {
alert(item);
});
}
);
また、上記のように、応答配列をループして、文字列にしたい各項目を出力しようとしますが、アラート値として「[object Object]」のみを取得します。表示しようとしている文字列を表示する方法がわかりません!
Test.phpのPHPコード:
<?php
$product_id = $_POST['id'];
$images = $_POST['images'];
$response = array();
$response['id'] = $product_id;
$response['images'] = $images;
echo json_encode($response);
?>
そして、DOMの関連部分は次のようになります。
<input type='hidden' value='{{ color_entry_id }}' name='color_id' />
<p><img src='{{ color_img_link }}' /></p>
<p>Image Link: <input class='{{ color_entry_id }}' name='edit_image' type='text' size='150' value='{{ color_img_link }}' /></p>
<div class='colors {{ color_entry_id }}'>
<div class='img_color'>
<a href='javascript:void' style='background:...' class='selected'></a>
<p>...</p>
</div>
</div>
PHP側でJSONエンコーディングを誤って行っているのか、jQueryで応答を間違ってループしているだけなのか、助けていただければ幸いです!
では、投稿から返されるデータオブジェクトは{"id":"abc","images":[{"color123":"somelink.com\/123","color223":"somelink.com\/223"}]};
アラートを変更すると、探している値が見つかります。
$.post(
"test.php",
{ id: product_id, "images[]": jQuery.makeArray(image_links) },
function(data) {
var response = jQuery.parseJSON(data);
var images = response.images[0];
for (var i in images){
alert(images[i]);
}
}
);
$ .postはデフォルトでxmlを想定しているため、応答形式を指定する必要があります
$.post(
"test.php",
{ id: product_id, images : jQuery.makeArray(image_links) },
function(response) {
// Response is automatically a json object
for(var i = 0; i < response.images.length; i++) {
alert(response.images[i]);
}
}, 'json' // <-- HERE
);
また、PHPスクリプトにコンテンツタイプヘッダーを追加することも検討してください。
<?php
header("Content-type: application/json"); // Adding a content type helps as well
$product_id = $_POST['id'];
$images = $_POST['images'];
$response = array();
$response['id'] = $product_id;
$response['images'] = $images;
echo json_encode($response);
?>
非常に基本的な例は次のようなものです:
$.post('test.php', {"id": 42}, function (json) {
console.log(json);
}, 'json');
PHPの例
$number = Rand(1,$_POST["id"]);
return print json_encode($number);