Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Jquery-未捕获类型错误:无法使用';在';操作员搜索';324';在里面_Php_Javascript_Jquery_Ajax_Yii - Fatal编程技术网

Php Jquery-未捕获类型错误:无法使用';在';操作员搜索';324';在里面

Php Jquery-未捕获类型错误:无法使用';在';操作员搜索';324';在里面,php,javascript,jquery,ajax,yii,Php,Javascript,Jquery,Ajax,Yii,我试图通过ajax发送Get请求,并输出服务器以html格式返回的json数据 但是,我犯了这个错误 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', fu

我试图通过ajax发送Get请求,并输出服务器以html格式返回的json数据

但是,我犯了这个错误

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

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

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",}]
有人知道如何解决这个问题吗

请帮帮我。
提前感谢:)

您有一个JSON字符串,而不是对象。告诉jQuery您希望得到一个JSON响应,它将为您解析它。使用而不是,或者将数据类型参数传递给
$。获取

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

如果要获取JSON,请使用so,它会自动将JSON转换为JS对象。

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

我通过添加JSON数据类型修复了类似错误,如下所示:

$.ajax({
    type: "POST",
    url: "someUrl",
    dataType: "json",
    data: {
        varname1 : "varvalue1",
        varname2 : "varvalue2"
    },
    success: function (data) {
        $.each(data, function (varname, varvalue){
            ...
        });  
    }
});
在我的控制器中,我必须在任何字符串周围使用双引号(注意:它们必须在java中转义):

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

使用getJSON

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

在我的例子中,我忘记告诉类型控制器响应是JSON对象。
setContentType(“应用程序/json”)

该错误消息来自何处?能否在每个
stmt之前添加
console.log(data)
,并查看控制台中打印的内容谢谢!我的问题现在解决了:)这可能有助于某人在这里登陆,但我的问题是使用
$。each('selector')…
而不是
$('selector')。each(…
对于从谷歌来这里查找此问题的任何人来说,$.post,将相同的第三个参数添加到$.post也有效
[{"id":"50","name":"SEO"},{"id":"22","name":"LPO"}]
$.getJSON(
'index.php?r=admin/post/ajax',
{"parentCatId":parentCatId},
function(data){                     
    $.each(data, function(key, value){
        console.log(key + ":" + value)
    })
});