setIntervalを使用して AJAX ページの更新を設定しました。サーバーの速度が非常に遅いため、前のリクエストが完了する前に新しいリクエストが開始されることがあります。
どうすればそれを防ぐことができますか?
setIntervalを使用して AJAX ページの更新を設定しました。サーバーの速度が非常に遅いため、前のリクエストが完了する前に新しいリクエストが開始されることがあります。
どうすればそれを防ぐことができますか?
更新間隔よりも短いタイムアウト値を使用してください。要求がタイムアウトすると、エラー ハンドラーが呼び出されるため、ハンドラーでタイムアウト エラーと他の種類のエラーを区別する必要があります。
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
timeout: 5000, /* ms or 5s */
success: function(msg){
alert( "Data Saved: " + msg );
}
});
jquery.com のドキュメント。上記の例は同じソースからのものですが、タイムアウト値が追加されています。
固定のハードコードされた間隔を使用する代わりに、次の更新を、現在の更新を処理する最後のステップとしてトリガーします。たとえば、「成功」(または「完了」) イベントのコールバックなどです。
動的な遅延を計算できるように、現在のリクエストが送信された時間を追跡する変数を追加できます。
私が言えることは、コードでフラグを使用することです。のように(私が実際に推奨するものではなく、単純な例です)
var isWorking = false;
function doRequest(){
if(isWorking) return;
isWorking = true;
$.ajax({
...,
success: workWithResponse
});
}
function workWithResponse(){
/* doAnythingelse */
isWorking = false;
}
setInterval(doRequest,1000);
そのようなものは原始的ですが、競合状態を回避できます。よろしく。
代わりに setTimeout を使用し、AJAX リクエストの結果を受け取った後にのみ別の setTimeout を開始してください。そうすれば、最後の更新から指定された期間が経過した後にのみ更新が行われます。