Jquery - 未捕获的类型错误:无法使用“in”运算符在中搜索“324”
Posted
技术标签:
【中文标题】Jquery - 未捕获的类型错误:无法使用“in”运算符在中搜索“324”【英文标题】:Jquery - Uncaught TypeError: Cannot use 'in' operator to search for '324' in 【发布时间】:2013-09-01 08:45:23 【问题描述】:我正在尝试通过 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",]
有人知道如何解决这个问题吗?
请帮帮我。 在此先感谢:)
【问题讨论】:
那个错误信息是从哪里来的? 能否在each
stmt 前添加console.log(data)
,看看控制台打印了什么
谢谢!我的问题现在解决了:)
这可能对某人有所帮助 - 登陆这里,但我的问题是使用 $.each('selector')...
而不是 $('selector').each(...
【参考方案1】:
你有一个 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'
);
【讨论】:
对于任何从谷歌来到这里寻找这个问题的人,$.post,将相同的第三个参数添加到 $.post 也可以【参考方案2】:您还可以使用$.parseJSON(data)
将来自 PHP 脚本的字符串显式转换为真正的 JSON 数组。
【讨论】:
【参考方案3】:如果您要获取 JSON,请使用 $.getJSON(),以便它自动将 JSON 转换为 JS 对象。
【讨论】:
【参考方案4】:我通过像这样添加 json 数据类型修复了一个类似的错误:
$.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"]
【讨论】:
【参考方案5】:使用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/
【讨论】:
【参考方案6】:在我的例子中,我忘记告诉类型控制器响应是一个 JSON 对象。 response.setContentType("application/json");
【讨论】:
以上是关于Jquery - 未捕获的类型错误:无法使用“in”运算符在中搜索“324”的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:无法使用 jQuery 验证读取未定义的属性“调用”
未捕获的类型错误:无法使用“in”运算符在未定义中搜索“scrollLeft”
JQuery:未捕获的类型错误:无法读取未定义的属性“调用”
未捕获的类型错误:无法使用“in”运算符在未定义的 vue 路由器中搜索“路径”