質問

生の 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 ブロックでラップするとうまくいくはずです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top