2010-12-17 144 views
0

我有來自服務器的響應如下:jQuery的處理JSON響應

{"invalid_emails":["adsasdasd"],"result":"success","valid_emails":["[email protected]"]} 

但這個錯誤?

  $.ajax({ 
       type: 'POST', 
       url: '/users/invitation', 
       data: $('#user_invitation_new').serialize(), 
       success: function(e) { 
        jsonObject = jQuery.parseJSON(e); 
        jsonObject.valid_emails 
        jsonObject.invalid_emails 

我得到以下錯誤:遺漏的類型錯誤:無法讀取空

+0

你能看懂其他屬性? – 2010-12-17 01:00:50

回答

6

賈森和喬納森提到的,你不應該手動反序列化JSON的。根據您使用的jQuery版本,jQuery將根據響應的內容類型標題自動反序列化JSON。所以,你可能試圖$ .parseJSON()這已經是一個對象,而不是一個JSON字符串。

要確保jQuery的爲您完成此自動反序列化,一個dataType參數添加到$阿賈克斯()調用:

$.ajax({ 
    type: 'POST', 
    dataType: 'json', 
    url: '/users/invitation', 
    data: $('#user_invitation_new').serialize(), 
    success: function(response) { 
    console.log(response.valid_emails); 
    console.log(response.invalid_emails); 
    } 
}); 
+0

+1用於指出內容類型標題 - 真的幫助我了! – adamdport 2012-10-02 16:41:35

2

的特性「valid_emails」你可以不必解析JSON,因爲它已經是一個JSON對象。嘗試做

var emails = e.valid_emails; 

如果仍然無法正常工作,包括在您.ajax()聲明dataType: 'json'

0

如果您的服務器使用JSON響應,那麼您應該運行jQuery.parseJSON(e);。該e參數可能已經成爲了那麼試試這個爲您的成功處理程序:

success: function(e) 
    var valEmails = e.valid_emails, 
     invalEmails = e.invalid_emails; 
}; 
0

剛剛嘗試包括

dataType: 'json',