TypeError: Cannot use 'in' operator to search for 'error' in null
我不知道为什么会出现这个错误。它出现在'error' in json
function parse(data, cb) {
try {
var json = $.parseJSON(data);
if ('error' in json) {
error(json.error);
return;
}
cb(json);
} catch(err) {
console.log(err);
error();
return;
}
}
答案 0 :(得分:1)
因为$.parseJSON()
返回null。如果您尝试将json字符串转换为对象,请使用JSON.parse()
:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
答案 1 :(得分:1)
您的data
为空string
,null
或undefined
,因此json
变量为NULL
,因为行为不正确jQuery
:
在jQuery 1.9之前,$ .parseJSON返回null而不是抛出一个 如果传递空字符串,null或未定义,则会出错 虽然那些是无效的JSON。
在jQuery
的更高版本中,您的catch
块应该捕获异常,这是正确的行为。不要将$.parseJSON(data)
与jQuery
版本一起使用,请使用原生方法:
JSON.parse(data);
答案 2 :(得分:0)
如果您正在获取JSON,请使用$ .getJSON(),以便自动将JSON转换为JS对象。
答案 3 :(得分:0)
在 jQuery 1.9 之前,如果传递空字符串,null或未定义,
$.parseJSON
返回null而不是抛出错误,即使这些是无效的JSON。从 jQuery 3.0 开始,
$.parseJSON
已弃用。要解析JSON对象,请改用原生JSON.parse
方法。
http://api.jquery.com/jquery.parsejson/
您可以使用本机JSON.parse并在必要时捕获任何问题(这样您就可以向用户显示错误):
try {
var json = JSON.parse(data);
// you know the json was parsed successfully
//if you moved passed this line and didn't move
//the the catch block :-)
cb(json);
} catch (error) {
error(json.error);
return;
}
您的try & catch
块应该捕获try
块内的行引发的任何错误。因此,如果JSON,parse
未能成功将字符串转换为JSON,则会抛出错误,这将使此函数中断try
块并移至catch
块。
因此,您可以移除添加的if
以检查错误,只需使用代码中已有的try & catch