Javascript 无法使用';在';操作员搜索';错误';无效

Javascript 无法使用';在';操作员搜索';错误';无效,javascript,jquery,json,Javascript,Jquery,Json,我不知道为什么会出现这个错误。它发生在json中的“错误”上 TypeError: Cannot use 'in' operator to search for 'error' in null 因为$.parseJSON()返回null。如果您试图将json字符串转换为对象,请使用json.parse():由于jQuery的错误行为,null或未定义的,因此json变量为null: 在jQuery1.9之前,$.parseJSON返回null而不是抛出 如果传递给它的是空字符串、null或未定

我不知道为什么会出现这个错误。它发生在json中的“错误”上

TypeError: Cannot use 'in' operator to search for 'error' in null

因为
$.parseJSON()
返回null。如果您试图将json字符串转换为对象,请使用
json.parse()

由于
jQuery
的错误行为,
null
未定义的
,因此
json
变量为
null

在jQuery1.9之前,$.parseJSON返回null而不是抛出 如果传递给它的是空字符串、null或未定义,甚至 尽管这些都不是有效的JSON

在较新版本的
jQuery
中,您的
catch
块应该捕获异常,这是一种正确的行为。不要将
$.parseJSON(数据)
用于该版本的
jQuery
,请使用本机方法:

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

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

来自jQuery文档:

jQuery 1.9之前,
$.parseJSON
返回null,而不是在传递空字符串、null或未定义时抛出错误,即使这些字符串不是有效的JSON

从jQuery 3.0开始,
$.parseJSON
已被弃用。要解析JSON对象,请改用原生的
JSON.parse
方法

您可以使用本机JSON.parse并在必要时捕获任何问题(以便向用户显示错误):

您的
try&catch
块应该捕获从
try
块内的行抛出的任何错误。因此,如果
JSON,parse
无法成功地将字符串转换为JSON,它将抛出一个错误,这将使此函数中断
try
块并移动到
catch

因此,您可以删除为检查错误而添加的
,只需使用代码中已有的
try&catch
,也可以使用JSON.parse(数据);
JSON.parse(data);
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;

}