2016-11-27 67 views
1
TypeError: Cannot use 'in' operator to search for 'error' in null 

我不知道爲什麼會出現這個錯誤搜索「錯誤」。它occures上'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; 
    } 
} 

回答

1

data是一個空stringnull,或undefined等等json變量是NULL因爲對jQuery不正確的行爲:

在jQuery 1.9之前,$ .parseJSON返回null,而不是拋出一個 錯誤,如果它傳遞了空字符串,null或undefined,即使是 (儘管它們不是有效的JSON)。

jQuery更高版本,您catch塊應該捕獲異常,這是一個正確的行爲。不要使用$.parseJSON(data)與該版本的jQuery,使用本地方法:

JSON.parse(data); 
0

如果您要提取JSON,使用$ .getJSON(),所以它會自動將JSON轉換成JS對象。

+0

或者你可以使用JSON.parse(數據); –

0

從jQuery的文檔:

此前的jQuery 1.9$.parseJSON返回null,而不是如果它傳遞了一個空字符串,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你已經在你的代碼