我正在尝试在 jQuery 中实现 XHR 流彗星技术,但在检测onreadystatechange
事件时遇到了一些问题。我正在使用 Firefox 4.0.1。
我正在使用预过滤器(自 jQuery 1.5 起可用)来修改本机 XHR 对象,特别是为事件添加事件处理程序onreadystatechange
。我在http://jsfiddle.net/Rdx6f/有一个粗略的实现。触发事件时,该代码会将 XHR 对象readyState
和responseText
属性附加到文档中。onreadystatechange
然而,奇怪的是,它似乎只在为 1 onreadystatechange
时检测到事件。readyState
换句话说,onreadystatechange
当 XMLHttpRequest 对象处于“已打开”状态(readyState 1)时,jQuery 似乎正在检测事件,但当 XHR 对象处于“已收到标头”(readyState 2)、“正在加载”(readyState 3 ),也不是“完成”(readyState 4)。
奇怪的是,如果我alert()
在事件处理程序中,那么当 readyState 为 1、2、3 和 4 时,我确实看到了处理。请参阅http://jsfiddle.net/Rdx6f/1/。与http://jsfiddle.net/Rdx6f/相同的代码,只是ing 而不是附加到文档中。onreadystatechange
alert()
我还可以在原生 JavaScript 中检测 1、2、3 或 4 的onreadystatechange
事件——参见http://jsfiddle.net/d7vaH/。(该代码几乎一字不差地取自 Dylan Schiemann 在“Even Faster Websites”一书第 115 页上的 XHR 流的实现。)readyState
我只是在这里做错了什么,比如使用 jQuery 的 Ajax 预过滤器错误或 JavaScript 错误?这可能是 jQuery 中的错误吗?