Comet (ロングポーリング) と XmlHttpRequest ステータス
-
26-09-2019 - |
質問
生の XmlHttpRequestObjects + Comet Long Polling を少し遊んでいます。(通常は、GWT または別のフレームワークにこれを処理させますが、それについて詳しく学びたいと思っています。)
次のコードを書きました。
function longPoll() {
var xhr = createXHR(); // Creates an XmlHttpRequestObject
xhr.open('GET', 'LongPollServlet', true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
...
}
if (xhr.status > 0) {
longPoll();
}
}
}
xhr.send(null);
}
...
<body onload="javascript:longPoll()">...
を包みました longPoll()
をチェックする if ステートメントを呼び出します。 status > 0
, というのは、ページを離れると (別の場所を参照するか、リロードすることで)、最後の不要な Comet 呼び出しが送信されることに遭遇したからです。 [そして Firefox では、ページをリロードするときにさえ深刻な問題が発生しますが、理由はまだ完全には理解できません。]
質問: あれですか status
この問題を処理する正しい方法を確認してください。あるいは、より良い解決策はありますか?
解決
私の現在の答えは、誤りであることが証明されるまでは、その解決策は正しいということです。
他のヒント
このループのシンプルさが気に入っています...これは単なる通常のポーリングですが、ロングポーリングとみなされる前に、サーバーサイドスクリプトはスリープするか、少なくとも新しいデータを取得するまでループする必要があると思います。ただし、リクエストが失敗したかどうかを確認するものを追加します。それを try catch ブロックでラップするとうまくいくはずです
所属していません StackOverflow