Jquery – Uncaught TypeError:不能使用'in'运算符来search'324'
我试图通过ajax发送Get请求,并输出服务器在HTML中返回的json数据。
但是,我得到了这个错误。
Uncaught TypeError: Cannot use 'in' operator to search for '324' in [{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]
这是我的代码,通过ajax发送一个Get请求到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) }) } ) })
这是我的PHP代码,返回json格式的查询结果。
public function actionAjax(){ $parentCatId=$_GET['parentCatId']; $catData = Category::getTargetCategoryData($parentCatId); echo CJSON::encode($catData); Yii::app()->end(); }
JSON数据输出的PHP是这样的。
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]
任何人都知道如何解决这个问题?
请帮我一下 提前致谢 :)
你有一个JSONstring,而不是一个对象。 告诉jQuery你期望得到一个JSON响应,它会为你parsing它。 使用$ .getJSON而不是$ .get ,或将dataTypeparameter passing给$.get
:
$.get( 'index.php?r=admin/post/ajax', {"parentCatId":parentCatId}, function(data){ $.each(data, function(key, value){ console.log(key + ":" + value) }) }, 'json' );
您也可以使用$.parseJSON(data)
,它将显式地将来自PHP脚本的string转换为真正的JSON数组。
如果您要获取JSON,请使用$ .getJSON(),以便自动将JSON转换为JS对象。
我通过添加json数据types来修复类似的错误:
$.ajax({ type: "POST", url: "someUrl", dataType: "json", data: { varname1 : "varvalue1", varname2 : "varvalue2" }, success: function (data) { $.each(data, function (varname, varvalue){ ... }); } });
在我的控制器中,我不得不在任何string周围使用双引号(注意:它们必须在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; }
所以,你可以尝试在数字周围使用双引号(如果它们被用作string的话)(并删除最后一个逗号):
[{"id":"50","name":"SEO"},{"id":"22","name":"LPO"}]
使用getJSON
$.getJSON( 'index.php?r=admin/post/ajax', {"parentCatId":parentCatId}, function(data){ $.each(data, function(key, value){ console.log(key + ":" + value) }) });