2013-10-19 67 views
5

當我把這個代碼:無法訪問對象屬性的jQuery AJAX調用

console.log(data); 
console.log(data.email); 

我得到這樣的結果:

{"userName":"2","email":"2","firstName":"2","lastName":"2","isAdmin":"0","isEnabled":"1"} index.php:162 
undefined 

第一console.log(data);輸出正確。然後,我想要訪問data對象的email屬性,並且要使用console.log(data.email);。但是,正如您在上面看到的那樣,它表示它是「未定義的」。

爲什麼我無法訪問此屬性(或任何屬性)?注意:我也嘗試過data['email'],這也沒有奏效。

回答

4

我沒有意識到,jQuery不會自動解析返回的JSON到一個對象。它只是一個JSON字符串。要解決,我必須這樣做:

data = JSON.parse(data); 

跨瀏覽器:

data = $.parseJSON(data); 
+2

您還可以通過告訴jquery您的服務器是返回JSON。 'dataType:「json」'或將服務器的響應內容類型設置爲''application/json「' –

+0

謝謝,我以爲它是'contentType',所以它不工作!我更喜歡你的解決方案。 – user1477388

+2

您應該使用'$ .parseJSON'而不是'JSON.parse()',因爲jquery以跨瀏覽器的方式處理它。 – Yang

0

在我的情況,我可以證明通過的console.log的對象,但我不能訪問任何屬性一件簡單的事情:我沒有意識到我的JSON結構錯誤,就像一個單個對象的數組。然後我可以使用索引訪問它的屬性。

console.log(data.email);

undefined

但後來我想...

console.log(data[0].email);

[email protected]

我只是固定我的模型和它完美的作品。感謝我的coleague Aaron Lil!

0

我遇到過同樣的問題。並要修復它,我需要創建新的數組,然後將數據對象的每個值通過迭代「數據」,如下所示:

var arrayTest = []; 

$.each(data, function (index, value) { 
    arrayTest["email"] = value.email; 
    arrayTest["andsoforth"] = value.andsoforth; 
    //etc... 
}); 

// Now retrieve data by using arrayTest 
console.log(arrayTest["email"]);