2014-07-25 76 views
1

如何訪問在JQuery AJAX請求的完整功能中返回的JSON中存儲的數據。例如,我有以下代碼:如何從JQuery中接收JSON響應中的數據?

$.ajax({ 
    url: 'buildings.php', 
    data: "building=" + building, 
    complete: function (response) { 
     alert(response.responseText); 
     alert(response.name); 
    } 
}); 

在它顯示以下,這是我從PHP發送的預期JSON數據第一警報。

{"name":"HSB","description":"description","directionsURL":"directionsURL","imageArray":{"1":"URL 1","2":"URL 2"}} 

在第二個警告,它顯示

undefined 

我如何進入我收到一個顯示在第一警報的數據?

+1

我懷疑你得到的迴應作爲字符串。你可以明確地告訴jquery返回json對象。將dataType:'json'添加到您的ajax請求中。默認是基於您的服務器響應的智能訪客。 (您的服務器響應可能會返回爲純文本/文本) – hutingung

+0

嘗試console.log(響應)。向我們展示firebug控制檯/開發人員工具的結果javascript控制檯(如果您使用的是谷歌瀏覽器) – hutingung

+0

@Connorelsea是否檢查過您是否確實從PHP腳本返回了正確的內容類型標頭和有效的JSON? – Klors

回答

1

如果添加dataType: "json"到呼叫響應將進行一個JSON對象:

$.ajax({ 
    url: 'buildings.php', 
    data: "building=" + building, 
    dataType: "json", 
    complete: function (response) { 
     alert(response.name); 
    } 
}); 

編輯:這樣看來,無論出於何種原因:jQuery是不能夠自動解析,但JSON.parse(response.responseText)做訣竅。

+0

警報仍然產生未定義。這是[我的代碼與您的正確。](https://gist.github.com/Elsealabs/e7694afa9c5a54b67841) – Connorelsea

+0

你可以在更改之前解析它嗎?像這樣'JSON.parse(response)' –

+0

這是我刪除dataType並嘗試使用'var buildingObject = JSON.parse(response);'解析它時得到的錯誤。 HTTP://i.imgur。com/a0T7nTU.png – Connorelsea

1

您的PHP腳本是否在標頭中返回正確的MIME類型?如下所示 - Returning JSON from a PHP Script

如果是這樣,然後將其添加到選項。

dataType: "json", 

一個最簡單的失誤使,如果你的內容標題是正確是返回引用的字符串,而不是實際的JSON。即。實際返回的內容是

"{ \"key\": \"value\" }" 

代替

{ "key": "value" } 
+0

爲什麼contentType? –

+0

@KevinB好點,沒有正確記下明文字符串的數據輸入 – Klors

0

你的PHP簡單地返回一個字符串,看起來像 JSON對象,但JavaScript是不是足夠聰明,知道你想要的成爲一個JSON對象。只是解析響應你的行爲在它之前:

$.ajax({ 
    url: 'buildings.php', 
    data: "building=" + building, 
    complete: function (response) { 
     var json = JSON.parse(response.responseText); 
     alert(json.responseText); 
     alert(json.name); 
    } 
}); 
+0

我算出來了。這將是正確的,但不是'JSON.parse(response)',它提供了一個錯誤,它應該是'JSON.parse(response.responseText)'。你能否將這個添加到你的答案中,以供將來看這個的人使用?完成之後,我可以將其標記爲正確的答案。感謝您的幫助。 – Connorelsea

+0

感謝您的收穫。我不確定你的原始數據是如何格式化的。 – Michael

1

你行你jQuery.getJSON()和檢查響應

0

它看起來像response.responseText包含您的JSON數據包的contentType。嘗試這樣的:

var json = JSON.parse(response.responseText); //assume response.responseText is a json string 
console.log(json.name); 
+0

字符串沒有名稱屬性。 –

+0

非常真實...請參閱編輯。 – TrazeK

相關問題