我可以使用jQuery预过滤器来检测readyState == 3的onreadystatechange事件吗?

| 我正在尝试在jQuery中实现XHR流式Comet技术,但在检测
onreadystatechange
事件时遇到了一些麻烦。我正在使用Firefox 4.0.1。 我正在使用预过滤器(从jQuery 1.5开始可用)来修改本机XHR对象,特别是将事件处理程序添加到
onreadystatechange
事件中。我在http://jsfiddle.net/Rdx6f/上有一个粗略的实现。当触发“ 0”事件时,该代码将XHR对象的
readyState
responseText
属性附加到文档中。奇怪的是,似乎只有当
readyState
为1时才检测到
onreadystatechange
事件。 换句话说,当XMLHttpRequest对象处于状态\“ opened \”(readyState 1)时,jQuery似乎正在检测
onreadystatechange
事件,但是当XHR对象处于状态\“已接收标头\”(readyState 2), “正在加载”(readyState 3),也不是“已完成”(readyState 4)。 奇怪的是,如果我在事件处理程序中使用
alert()
,那么当readyState为1、2、3和4时,我确实会看到
onreadystatechange
处理。请参见http://jsfiddle.net/Rdx6f/1/。与http://jsfiddle.net/Rdx6f/相同的代码,只是“ 8”字形而不是附加到文档中。 当本机JavaScript中的
readyState
是1、2、3或4时,我还可以检测到
onreadystatechange
事件-请参见http://jsfiddle.net/d7vaH/。 (该代码几乎完全取自Dylan Schiemann在“ Even Faster Websites”一书第115页上对XHR流的实现。) 我在这里只是在做错什么,例如使用jQuery \的Ajax预过滤器错误或发生JavaScript错误?这可能是jQuery中的错误吗?     
已邀请:
仅供参考:我对此进行了深入研究,结果发现jQuery(从1.5开始)在内部使用onreadystatechange事件。这样的结果是jQuery将始终将其内部函数写入onreadystatechange事件,覆盖您设置的任何内容。每当实际发送AJAX调用时都会发生这种情况,这意味着您为onreadystatechange编写的函数将一直工作到那个时候(这意味着直到readyState = 1才可以工作,但是不会更长)。 目前,这是建议的解决方法:http://jsfiddle.net/tBTW2/ 目前,如果不使用jQuery(或者回到1.4.4或更低版本,可以正常工作)或编辑jQuery代码(因为目前它们将始终),我将看不到其他(更好的)解决方法覆盖您尝试插入的所有内容)。 但是,在即将发布的版本中(最有可能在1.8中),jQuery团队计划根据不同的readyStates实现对触发事件的支持。他们将以某种方式使用Deferreds。 这是保留此即将发生的更改的票证: http://bugs.jquery.com/ticket/9883     
这是与jQuery bugzilla错误#8327正确链接的预过滤功能, http://jsfiddle.net/d8ckU/1/     

要回复问题请先登录注册