使用 native XMLHttpRequest
对象,可以将事件监听器添加到 onreadystatechange
事件,并在 readyState
时收到通知是 2
,或HEADERS_RECEIVED
。
这很有用,因为这可以在长传输完成之前读取 HTTP 响应 header 。
然而,在 jQuery 的 AJAX 包装器中,似乎没有任何方法可以做到这一点。 jQuery.ajax API documentation实际上说了以下内容。
No
onreadystatechange
mechanism is provided, however, sincedone
,fail
,always
, andstatusCode
cover all conceivable requirements.
除非我弄错了,否则所有列出的回调都会在收到整个请求后触发,这可能是在 header 可用之后很长一段时间,并且 readyState
是 2
.
有没有办法给 onreadystatechange
添加回调和/或readyState
2
当使用 jQuery 的 AJAX 包装器时,无需轮询 readyState
属性(property)?
我想可以轮询 readyState
使用 setInterval
的 AJAX 对象的属性,但出于显而易见的原因,我认为这不是一个真正的解决方案。我也不认为修改 jQuery 的核心是一个真正的解决方案。
更新:
另一位 SO 用户引导我访问 this question 。不幸的是,这些答案似乎都不起作用。修改 jQuery 并不是真正的解决方案。使用 jQuery 创建 XHR 对象有点违背了目的。而最后一个答案根本不起作用。事实上,整个问题看起来都是针对过时的 jQuery。
最佳答案
嗯,简短的回答是,由于旧版浏览器的兼容性问题,jQuery 不提供此功能。为了解决这些问题,jQuery 只是将标准降低到最低公分母。
稍微长一点的答案是它可以使用 beforeSend
和 xhr
方法进行猴子修补,但这并不是微不足道的,特别是当您考虑遗留和跨浏览器兼容性。为了减轻疼痛,I've create a jQuery plugin就是这样。
关于javascript - 使用 jQuery.ajax 的 HEADERS_RECEIVED 的 readState 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680515/