web-dev-qa-db-ja.com

Jquery-キャッチされていないTypeError: 'in'演算子を使用して '324'を検索することはできません

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

しかし、私はこのエラーを受け取りました。

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

これは、ajaxによってphpファイルにGetリクエストを送信する私のコードです。 $ .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",}]

この問題を修正する方法を知っている人はいますか?

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

43
Hayato

オブジェクトではなくJSON文字列があります。 jQueryに、JSON応答が期待されていることを通知すると、JSON応答が解析されます。 $。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'
);
72
Paulpro

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

21
HansH

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

6
doobdargent

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"}]
4
LeHill

GetJSONを使用する

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

詳細はこちら http://api.jquery.com/jQuery.getJSON/

0
TNS MUMET