在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)
?
我想你混淆了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
对象。
是的,我明白这一点。但我没有使用本地回调,我使用.ajaxSuccess()全局回调,根据这个文档http://api.jquery.com/ajaxSuccess/,你得到一个香草XMLHttpRequest对象 – nidoran
@afwu:但它是不,至少如果你使用jQuery> 1.4.1。检查这个小提琴,并查看'xhr instanceof XMLHttpRequest'的结果。 http://jsfiddle.net/9FD39/ –
谢谢Joao,我纠正了。所以我猜如果它的jqXHR是jqXHR的一个属性,它是我的json的javascript对象?你是如何知道1.7版以上版本不同的?谢谢 – nidoran
检查服务器是否返回“application/json”内容类型。这可能是jquery不能自动解析json的原因。 – c69
显示一些代码。 – zerkms
嗯,是的,我的xhr.responseType也没有定义。但在我的服务器代码(web.py框架)中,我确实调用了web.header(“Content-Type”,“application/json”)。你能想到xhr没有得到它的任何原因吗? – nidoran