jQuery:遅延間隔のajax機能まで前回の実行が完了
-
21-08-2019 - |
質問
私設のページをAJAXでリフレッシュ setInterval.時から、サーバーの進行は遅く新しい要求が開始される前には完了です。
ってしまいます。
解決
あなたのリフレッシュ間隔よりも短いタイムアウト値を使用します。あなたはタイムアウトエラーハンドラでエラーの他の種類を区別する必要がありますので、要求がタイムアウトには、それがエラーハンドラを呼び出しますときます。
$.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でに。上記と同じ供給源から例が、追加のタイムアウト値を持つ。
他のヒント
使用のsetTimeoutではなく、唯一のAJAX要求の結果を受信した後、別のsetTimeoutを開始します。こうすることでリフレッシュのみ最後のリフレッシュ以降、指定した期間の後に起こります。
の代わりに固定ハードコードされた間隔:トリガの次にリフレッシュとしての最後のステップのみの取り扱い、現在の一例の"成功"(または"完全な"イベントコールバック.
として追加できる変数のクラスは、バイトの時間は、現在のリクエストが送り込まれたので、できる計算力遅延:
- するようになった時間T1
- 非同期送信要求
- その他のものば...
- 非同期要求、コールバック関数を実行す
- 減算T1から現在時刻
- 合結果 < ご希望の依頼区間遅延設定値>0
- 場合、結果>=ご希望の依頼区間遅延設定値=0
- コsetTimeoutの遅延値を始め、次のサイクル
私はあなたのコード内でフラグを使用、であることを伝えることができます。
(私は実際にちょうど簡単な例をお勧めしませんどのような)のようにvar isWorking = false;
function doRequest(){
if(isWorking) return;
isWorking = true;
$.ajax({
...,
success: workWithResponse
});
}
function workWithResponse(){
/* doAnythingelse */
isWorking = false;
}
setInterval(doRequest,1000);
そのような何か、その原始いますが、競合状態を避けることができます。 よろしくます。
所属していません StackOverflow