単純なJQuery AJAXポーリングを作成しようとしています。 Webサーバーが遅い場合(特定の状況で非常に頻繁に...)、要求がブラウザーで「バックアップ」されないようにしたいです。ここでJquery AJAXタイムアウトが期待通りに機能しない
は私のコードです:
(function poll() {
$.ajax({
url: CONFIG.apiBase,
type: 'GET',
data: { name: DESTINATIONS },
traditional: true,
success: updateDisplay,
error: getError,
complete: setTimeout(poll, 2000),
timeout: 10000,
});
})();
私は、これは動作するはずだと思うの方法は、要求が成功した場合、それはupdateDisplay
を行い、その後、別のポーリング要求を開始する前に2秒を待つということです。
しかし、私のサーバーが超低速で10秒以内に応答できない場合は、getError
が呼び出され、要求が取り消され、最後に2秒間待機してから再びポーリングを試みます。
しかし、実際にはどのようなが起こることは、サーバが遅いされている場合、要求はバックアップさせ、ブラウザは一貫してポーリングし、サーバごとに2秒ということです:
私は基本的にどのように誤解アムtimeout
は動作するはずですか?
問題は 'setTimeout(poll、2000)'の行です.2秒ごとに関数を再帰的に呼び出すのが問題です。 –
あなたは即座に 'setTimeout(poll、2000)、'を呼び出して、関数クロージャでラップしようとしています。 'function(){setTimeout(poll、2000); } ' – Keith
setTimeout id参照をメソッドに設定しています... – epascarello