2012-09-09 90 views
3

我有一個關於XMLHttpRequest對象如何工作的問題。在https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest,在屬性下,我正在查看「響應」屬性。描述說如果我的內容類型是json,我應該返回一個JavaScript對象。但是,在我的代碼xhr.response財產是undefined在jquery中訪問xhr的json響應

具體來說,我有一個設置在DOM元素上的.ajaxSuccess()回調函數,它接收參數(event, xhr, settings)xhr.responseText是我的json的純文本版本,但xhr.response未定義。有沒有什麼辦法可以從xhr獲取對象而不需要調用$.parseJson(xhr.responseText)

+0

檢查服務器是否返回「application/json」內容類型。這可能是jquery不能自動解析json的原因。 – c69

+0

顯示一些代碼。 – zerkms

+0

嗯,是的,我的xhr.responseType也沒有定義。但在我的服務器代碼(web.py框架)中,我確實調用了web.header(「Content-Type」,「application/json」)。你能想到xhr沒有得到它的任何原因嗎? – nidoran

回答

1

我想你混淆了jQuery的通過$.ajaxSuccess()使用jqXHR對象,這是應該是前者的超集的XMLHttpRequest對象。

相反,你可以使用$.ajax()done處理程序,將解析JSON你如果數據類型是json。例如:

$.ajax({ 
    url: url, 
    dataType: 'json', 
}).done(function (response) { 
    // response is a JSON object, previously parsed by jQuery using $.parseJSON 
}); 

還要注意的是,即使的$.ajaxSuccess()的文件說,你得到一個香草XMLHttpRequest對象,這不再是真實的在jQuery 1.4.1 。相反,你get a jqXHR對象。

+0

是的,我明白這一點。但我沒有使用本地回調,我使用.ajaxSuccess()全局回調,根據這個文檔http://api.jquery.com/ajaxSuccess/,你得到一個香草XMLHttpRequest對象 – nidoran

+0

@afwu:但它是不,至少如果你使用jQuery> 1.4.1。檢查這個小提琴,並查看'xhr instanceof XMLHttpRequest'的結果。 http://jsfiddle.net/9FD39/ –

+0

謝謝Joao,我糾正了。所以我猜如果它的jqXHR是jqXHR的一個屬性,它是我的json的javascript對象?你是如何知道1.7版以上版本不同的?謝謝 – nidoran