6

私は生のXmlHttpRequestObjects+CometLongPollingで少し遊んでいます。(通常、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ステートメントで呼び出しをラップしました。[そしてFirefoxでは、ページのリロードを行うときに深刻な問題を引き起こすことさえあります。何らかの理由で、私はまだ完全には理解していません。]status > 0

質問:statusそれはこの問題を処理する正しい方法をチェックしますか、それともより良い解決策がありますか?

4

2 に答える 2

4

私の現在の答えは、間違っていることが証明されるまでは、解決策が正しいということです。

于 2010-06-08T07:18:46.860 に答える
0

私はこのループの単純さが好きです....これは通常のポーリングですが、サーバー側スクリプトは、長いポーリングと見なされる前に新しいデータを取得するまで、スリープまたは少なくともループする必要があると思います。ただし、要求が失敗するかどうかを確認するために何かを追加します。それをtrycatchblochでラップするとトリックが実行されます

于 2013-06-26T06:04:38.167 に答える