Jquery - 未捕获的TypeError:不能使用'in'运算符来搜索'324'

Hay*_*ato 43 javascript php ajax jquery yii

我正在尝试通过ajax发送Get请求并输出服务器在html中返回的json数据.

但是,我收到了这个错误.

Uncaught TypeError: Cannot use 'in' operator to search for '324' in 
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]
Run Code Online (Sandbox Code Playgroud)

这是我的代码,它通过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)
            })
        }
    )

})
Run Code Online (Sandbox Code Playgroud)

这是我的PHP代码,以json格式返回查询结果.

public function actionAjax(){

    $parentCatId=$_GET['parentCatId'];

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

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

}
Run Code Online (Sandbox Code Playgroud)

这个php输出的json数据是这样的.

[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何解决这个问题?

请帮帮我.提前致谢 :)

Pau*_*aul 72

你有一个JSON字符串,而不是一个对象.告诉jQuery你期望一个JSON响应,它会为你解析它.使用$ .getJSON而不是$ .get,或者将dataType参数传递给$.get:

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


小智 21

您还可以使用$.parseJSON(data)它将显式转换来自PHP脚本的字符串转换为真正的JSON数组.


doo*_*ent 6

如果您正在获取JSON,请使用$ .getJSON(),以便它自动将JSON转换为JS对象.


LeH*_*ill 5

我通过添加 json dataType 修复了类似的错误,如下所示:

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

在我的控制器中,我必须在任何字符串周围使用双引号(注意:它们必须在 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;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您的数字被用作字符串(并删除最后一个逗号),您可以尝试在数字周围使用双引号:

[{"id":"50","name":"SEO"},{"id":"22","name":"LPO"}]
Run Code Online (Sandbox Code Playgroud)