XHRストリーミングCometテクニックをjQueryに実装しようとしていますが、onreadystatechangeイベントの検出に問題があります。Firefox4.0.1を使用しています。
プレフィルター(jQuery 1.5以降で使用可能)を使用して、ネイティブXHRオブジェクトを変更します。具体的には、イベントハンドラーをイベントに追加しonreadystatechangeます。私はhttp://jsfiddle.net/Rdx6f/でそれの大まかな実装を持っています。このコードは、イベントが発生したときにXHRオブジェクトreadyStateとresponseText属性をドキュメントに追加します。onreadystatechangeただし、奇妙なことに、が1のonreadystatechange場合にのみイベントを検出するようreadyStateです。
つまり、jQueryはonreadystatechange、XMLHttpRequestオブジェクトが「opened」(readyState 1)の状態にあるときにイベントを検出しているように見えますが、XHRオブジェクトが「headersreceived」(readyState 2)、「loading」(readyState 3)の状態にあるときは検出していません。 )、または「完了」(readyState 4)。
奇妙なことに、私alert()がイベントハンドラーにいる場合、readyStateが1、2、3、および4のときの処理が表示されます。http://jsfiddle.net/Rdx6f/1/を参照してください。http://jsfiddle.net/Rdx6f/と同じコードですが、ドキュメントに追加する代わりにingするだけです。onreadystatechangealert()
ネイティブJavaScriptでが1、2、3、または4のonreadystatechange場合のイベントも検出できます。http://jsfiddle.net/d7vaH/を参照してください。(このコードは、本「Even FasterWebsites」の115ページにあるDylanSchiemannによるXHRストリーミングの実装からほぼ逐語的に引用されています。)readyState
jQueryのAjaxプレフィルターを間違って使用したり、JavaScriptを間違えたりするなど、ここで何か間違ったことをしているだけですか?これはおそらくjQueryのバグですか?