次のリクエストを送信する前にajaxリクエストを中止しますか? (jQuery)
-
05-07-2019 - |
質問
社内システムに1日から1年のデータを返すレポートがあります。このため、レポートはすべてを生成するのに0.5秒または45秒以上かかる場合があります。
レポートでは、多数のフィルターを変更できます。すべてのフィルターは、変更されると、非常に簡単にajaxリクエストを実行します。
var ax = $.ajax({
type: "GET",
url: "/blah",
data: values,
success: function(data) { .. }
});
今、私たちの素晴らしいユーザーが"ああ待って!これは1月ではなく2月にしたいです!」しかし、1月は大量のデータであるため、リクエストはすでに発生しています!そのため、ユーザーが日付オプションを2月に切り替えると、Javascriptコンソールが2番目のリクエストを送信していることがわかります。 2つのイベントがあり、レース!
/ report /?start_date = January(Still Loading ...)
/ report /?start_date = February(ねえ、私も今ここにいます!)
その後、通常、小さい方が早く読み込まれますが、その後、もう一方が読み込まれ、すでに持っているものが上書きされます.. hmm:)
こちらが機能していないようです。
だから今、私は何が欠けているのだろうか?ユーザーがいくつかのオプションを変更するとすぐに現在のリクエストを終了したいだけです(クライアント側、サーバー側では何もできないことを知っています)。 。 async:false
を設定することは、ユーザーをロックアウトするだけのオプションではありません。
ご協力いただきありがとうございます。
解決
ajaxmanager プラグインをご覧ください。
他のヒント
以前のリクエストを中止しようとするのは良い解決策ではないと思います。たぶん、簡単な回避策を使用する必要があります-各ajax要求に対してjavascriptのカウンターを増やし、それをajaxコールバックに渡します。コールバックが発生したら、応答のカウンターが現在のカウンター値と同じかどうかを確認します。そうでない場合は、応答を無視します-無効なクリックイベントによって起動されました。