2

このような短いポーリングを実装したい場合:

function firstCall(){
   $.ajax({
     ...
     success: function(response){
         if (response.OK == "OK"){
              secondCall();
         }else{
            firstCall();
         }
     }
  });

}

これで十分でしょうか?または、本当にfirstCall()in else句をsetTimeout?Thanksで囲む必要がありますか?

4

4 に答える 4

5

サーバーへのトラフィックが大量に発生しているため、少しタイムアウトを使用することをお勧めします。Ajaxは高速で、success非常に頻繁に実行されます。

したがって、代わりにsetTimeoutまたはsetIntervalを使用することをお勧めします。

于 2012-08-08T13:55:31.657 に答える
4

このソリューションは、最初の呼び出しが成功することに依存しています。任意の時点でコードが「成功」しない場合 (サーバーの問題が発生した可能性がありますか?)、「ポーリング」はページが更新されるまで停止します。

setInterval定義された間隔でそのメソッドを呼び出すために使用できます。これにより、この問題を回避できます。

setInterval(function(){
    $.ajax({}); // Your ajax here
}, 1000);

どちらのソリューションでも、サーバーは必要のない多くのリクエストを処理することになります。PollJS (恥知らずな自己プラグ)のようなライブラリを使用して遅延を増やし、パフォーマンスを向上させ、帯域幅を減少させることができます。

// Start a poller
Poll.start({
    name: "example_poller",
    interval: 1000,
    increment: 200,
    action: function(){
        $.ajax({}); // Your ajax here
    }
});

// If you want to stop it, just use the name
Poll.stop("example_poller");
于 2012-08-08T14:00:01.020 に答える
1

setTimeout()サーバーへのリクエストを減らしたい場合に必要です

于 2012-08-08T13:56:27.487 に答える
1

一定時間後にイベントをトリガーするためにユーザー アクションまたは ajax 応答を待ちたくない場合は、setTimeout が必要です。それ以外の場合は、ajax 呼び出しの成功またはエラー イベントを待つことができます。

于 2012-08-08T13:59:16.337 に答える