Javascript 使用jQuery.ajax接收的头的readyState事件
使用本机Javascript 使用jQuery.ajax接收的头的readyState事件,javascript,jquery,ajax,xmlhttprequest,readystate,Javascript,Jquery,Ajax,Xmlhttprequest,Readystate,使用本机XMLHttpRequest对象,可以将事件侦听器添加到onreadystatechange事件中,并在收到2或头时收到通知。 这很有用,因为这样可以在长时间传输完成之前读取HTTP响应头 然而,在jQuery的AJAX包装器中,似乎没有任何方法可以做到这一点。这本书实际上是这样说的 但是,由于完成,失败,始终,以及状态码涵盖了所有可能的需求,因此未提供任何onreadystatechange机制 除非我弄错了,否则所有列出的回调都是在接收到整个请求后触发的,这可能是在标头可用且read
XMLHttpRequest
对象,可以将事件侦听器添加到onreadystatechange
事件中,并在收到2
或头时收到通知。
这很有用,因为这样可以在长时间传输完成之前读取HTTP响应头
然而,在jQuery的AJAX包装器中,似乎没有任何方法可以做到这一点。这本书实际上是这样说的
但是,由于完成
,失败
,始终
,以及状态码
涵盖了所有可能的需求,因此未提供任何onreadystatechange
机制
除非我弄错了,否则所有列出的回调都是在接收到整个请求后触发的,这可能是在标头可用且readyState
为2
之后的很长一段时间
在使用jQuery的AJAX包装器时,是否有方法向onreadystatechange
和/或readyState
2
添加回调,而不轮询readyState
属性
我想可以使用<代码> SETIFATION/COD>来查询Ajax对象的<代码> RealyStase/Cuff>属性,但我不认为这是一个真正的解决方案,原因显而易见。我也不认为修改jQuery的核心也是一个真正的解决方案。
更新:
另一个用户让我去。不幸的是,这些答案似乎都不起作用。修改jQuery不是真正的解决方案。使用jQuery创建一个XHR对象有点达不到目的。最后一个答案根本不起作用。事实上,整个问题似乎都是针对过时的jQuery。简单的回答是,由于传统浏览器中的兼容性问题,jQuery不提供此功能。为了解决这些问题,jQuery只需将标准降低到最低公分母
稍微长一点的答案是,可以使用beforeSend
和xhr
方法将其添加到monkey补丁中,但这并不是一件小事,特别是考虑到传统和跨浏览器兼容性时。为了减轻疼痛,这就是原因。这似乎是可能的。从jQuery获取XMLHttpRequest
对象,然后监视状态更改,如下所述:
文档中的示例代码:
xhr.onreadystatechange = function () {
// In local files, status is 0 upon success in Mozilla Firefox
if(xhr.readyState === XMLHttpRequest.DONE) {
var status = xhr.status;
if (status === 0 || (status >= 200 && status < 400)) {
// The request has been completed successfully
console.log(xhr.responseText);
} else {
// Oh no! There has been an error with the request!
}
}
};
xhr.onreadystatechange=函数(){
//在本地文件中,在Mozilla Firefox中成功后状态为0
if(xhr.readyState==XMLHttpRequest.DONE){
var status=xhr.status;
如果(状态===0 | |(状态>=200&&status<400)){
//请求已成功完成
console.log(xhr.responseText);
}否则{
//哦,不!请求有错误!
}
}
};
看看这个问题。@Alexander不幸的是,这些答案似乎都不起作用。修改jQuery不是真正的解决方案。使用jQuery创建一个XHR对象有点达不到目的。最后一个答案根本不起作用。