17

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);
        });
    }
);

また、上記のように、応答配列をループして、文字列にしたい各項目を出力しようとしていますが、アラート値として「[objectObject]」しか取得されません。表示しようとしている文字列を表示する方法がわかりません。

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で応答を誤ってループしているだけなのか疑問に思っています。どんな助けでも大歓迎です!!

4

3 に答える 3

32

では、投稿から返されるデータオブジェクトは次のとおりです。{"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]);
        }
    }
);
于 2012-05-07T02:24:50.053 に答える
30

$ .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);
    ?>
于 2012-05-07T01:34:56.797 に答える
2

かなり基本的な例は次のようになります:

$.post('test.php', {"id": 42}, function (json) {
 console.log(json);
}, 'json');

PHPの例

$number = rand(1,$_POST["id"]);
return print json_encode($number);
于 2015-08-07T01:26:00.640 に答える