45

ajaxでGetリクエストを送信し、サーバーから返されたjsonデータをhtmlで出力しようとしています。

しかし、このエラーが発生しました。

Uncaught TypeError: Cannot use 'in' operator to search for '324' in 
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]

これは、Get リクエストを ajax で php ファイルに送信する私のコードです。$.each メソッドを使用すると、上記で示したエラーが発生します。

parentCat.on('change', function(e){
    parentCatId = $(this).val();

    $.get(
        'index.php?r=admin/post/ajax',
        {"parentCatId":parentCatId},
        function(data){                     
            $.each(data, function(key, value){
                console.log(key + ":" + value)
            })
        }
    )

})

これは、クエリ結果を json 形式で返す私の PHP コードです。

public function actionAjax(){

    $parentCatId=$_GET['parentCatId'];

        $catData = Category::getTargetCategoryData($parentCatId);

        echo CJSON::encode($catData);
        Yii::app()->end();

}

このphpが出力するjsonデータはこんな感じ。

[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]

誰でもこの問題を解決する方法を知っていますか?

私を助けてください。前もって感謝します :)

4

6 に答える 6

75

オブジェクトではなく、JSON 文字列があります。JSON 応答が必要であることを jQuery に伝えると、それが解析されます。$.getの代わりに$.getJSONを使用するか、 dataType引数を に渡します$.get

$.get(
    'index.php?r=admin/post/ajax',
    {"parentCatId":parentCatId},
    function(data){                     
        $.each(data, function(key, value){
            console.log(key + ":" + value)
        })
    },
    'json'
);
于 2013-08-29T04:08:31.140 に答える
22

$.parseJSON(data)これを使用して、PHP スクリプトからの文字列を実際の JSON 配列に明示的に変換することもできます。

于 2013-11-22T19:55:21.880 に答える
6

JSON をフェッチする場合は、$.getJSON()を使用して、JSON を JS オブジェクトに自動的に変換します。

于 2013-08-29T04:08:36.537 に答える
5

次のように json dataType を追加して、同様のエラーを修正しました。

$.ajax({
    type: "POST",
    url: "someUrl",
    dataType: "json",
    data: {
        varname1 : "varvalue1",
        varname2 : "varvalue2"
    },
    success: function (data) {
        $.each(data, function (varname, varvalue){
            ...
        });  
    }
});

そして、私のコントローラーでは、次のように文字列を二重引用符で囲む必要がありました (注: Java ではエスケープする必要があります)。

@RequestMapping(value = "/someUrl", method=RequestMethod.POST)
@ResponseBody
public String getJsonData(@RequestBody String parameters) {
    // parameters = varname1=varvalue1&varname2=varvalue2
    String exampleData = "{\"somename1\":\"somevalue1\",\"somename2\":\"somevalue2\"}";
    return exampleData;
}

したがって、数字が文字列として使用されている場合は、数字を二重引用符で囲んでみてください (最後のコンマを削除します)。

[{"id":"50","name":"SEO"},{"id":"22","name":"LPO"}]
于 2016-02-26T00:05:44.193 に答える