Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery.ajax接收的头的readyState事件_Javascript_Jquery_Ajax_Xmlhttprequest_Readystate - Fatal编程技术网

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对象有点达不到目的。最后一个答案根本不起作用。