在jquery中访问xhr的json响应

问题描述:

我有一个关于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

我想你混淆了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