私は、ユーザーが変更できるいくつかのドロップダウンフィルターを含むグラフを持つjavascriptアプリケーションを構築しました。すべてのドロップダウンには(jquery ajax呼び出しを介して)データを取得するためのサーバー要求を送信し、データをグラフ表示するイベントリスナーがあります。問題は、ユーザーがキーボードを使用してドロップダウンのさまざまな要素をすばやく通過する場合です。新しいものが解雇された場合、ajax呼び出しを強制終了する
サーバコールには約1秒かかるため、20秒以内にすばやくスクロールするとビルドアップにつながる可能性があります。サーバーへの20の異なる要求が作成され、サーバー要求の成功で実行されるコードの最後の部分が最新のフィルターになるという保証さえありません。
他のすべての非同期プロセスを強制終了するようにフィルタが変更されたときの私の質問は何ですか?
$("#filter").change(function(d) {
getData();
} //end of if
});
function getData() {
...
$.ajax({
url: myUrl
type: "GET",
dataType: "json",
success: function(d) {
[do some stuff]
} //end of success function
}); //end of ajax
} //end of getData
あなたは余分な中かっこを持っています最初の関数で 'if'を閉じていると言っています。 – AtheistP3ace
新しいリクエストを送信する前に、現在実行中のリクエストが完了するまで待つ必要があります(現在のリクエストが実行されている間に発生する可能性のあるリクエストを除外します)。あなたが 'XMLHttpRequest2'の' abort'機能を使用しても、これは依然として不必要な高いサーバ負荷につながります。 –
新しいAJAXコールが作成されたときに、以前のAJAXコールを中止する可能性があります。](https://stackoverflow.com/questions/9285271/abort-previous-ajax-call-when-a-new-one-made) –