不能使用'in'运算符来搜索null中的'error'

时间:2016-11-27 10:25:35

标签: javascript jquery json

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

4 个答案:

答案 0 :(得分:1)

因为$.parseJSON()返回null。如果您尝试将json字符串转换为对象,请使用JSON.parse()https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

答案 1 :(得分:1)

您的data为空stringnullundefined,因此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文档:

  

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