2016-06-14 289 views
1

下面是代碼:ajax json:如何從ajax接收的json對象中檢索數據?

$.ajax({ 
    url: MyURL, 
    method: 'GET', 
    processData: true, 
    contentType: 'application/json;', 
    dataType: "json", 
    success: function(data) { 
    alert("Success data= "+JSON.stringify(data)); 
    var count = Object.keys(data).length; 
    alert("count = "+count); 
    result=data[0]; 
    alert("result.CountryName:"+ result.CountryName); 
    alert("total " + keys.length + " keys: " + keys); 
    error: function(data) { alert("ajax Error"); }, 
}); 

首屆警報似乎確定,並給出: 成功數據= 「[{\」 國家或地區名稱\ 「:\」 法國\ 「\ 」貨幣\「:\」 歐元\「PriceMax \」:500.00,\「PriceStep \」:50.00,\「PriceMin \」:100.00}]「

從firebug/network/response我看到相同的數據(帶反斜槓! !)

第二次警報給出107.顯然每個字符都是一個對象? 但是當我檢查http://jsonlint.com/的語法時,json是正確的。

最後最後的警報給出:未定義。

那又怎麼了?

感謝您的幫助

回答

0

您要發送的數據是包含單個對象的數組。您需要使用data[0]['CountryName']

+0

遺憾的是它並沒有改變結果的警報( 「數據[國家或地區名稱]:」 +數據[0] [ '國家或地區名稱']); - > undefined alert(「data.CountryName:」+ data [0] .CountryName); - > undefined 謝謝Daniel Daniel – alvaro562003

+0

好像數據不會被解釋爲JSON;你需要先用'JSON.parse(data)'手動解析它。 –

0

您擁有的響應不是JSON對象,它是一個String。所以你需要解析它到一個JSON,然後把數組的第一個位置。

json_data = JSON.parse(data) 
result = json_data[0] 

然後使用該對象的屬性:

result.CountryName 
+0

嗨,感謝Rubico。我更正了代碼,但它不會改變結果。我想知道爲什麼我有count = 107? – alvaro562003

+0

我幾乎可以確定你是以String而不是Json的形式獲取數據的。現在我確定這是一個字符串,我做了一個測試,字符串長度恰好爲107。 – Rubico

+0

您是否嘗試過'console.log(data)',因爲Daniel在下面的評論中說過,也許您應該使用'JSON.parse(data)'將字符串解析爲JSON之前 – Rubico