0

ユーザーが画面 (左側) で基準を選択できるようにするプロジェクトに取り組んでおり、選択した基準にPole Country City基づいてデータを表示するテーブル (使用しているウィジェット) があります。

私の質問に何らかの文脈を与えるために絵を描いてみましょう

ポール

  • ヨーロッパ
  • アメリカ大陸
  • アジア

  • アメリカ
  • 中国
  • イングランド

  • ニューヨーク市

  • サンフランシスコ

  • 北京

これらは私が考えたほんの一例です。

もう 1 つの注記として、a を選択せず​​に選択することはできず、選択Countryせずに選択することPoleはできません(さらに絞り込むため)。CityCountry

ユーザーが選択項目の横にあるチェックボックスをクリックするたびに、データを提供する URL を使用して AJAX $.get 呼び出しが実行されます。この URL は実際に Controller クラスにヒットしていると思います (ただし、この実装は重要ではありません)。

この Web アプリケーションは、データを選択する際にそれほど高速ではありません。データの集計には数秒かかります。ここで and を選択 AmericasしたとしましょうUnited States(それぞれが ajax 呼び出しを行い、データをフィルタリングします)。

選択してから代わりにSan Francisco選択すると、両方のデータではなくデータのみが表示され、両方のチェックボックスがオンになります。New York CitySan Francisco

$.get 呼び出しは非同期であるため、これは私には理にかなっています。最初の呼び出しは、競合状態に勝っています。

それにもかかわらず、これはバグとして報告されており、解決方法についての解決策が必要です。私は Javascript があまり得意ではないので、誰かアイデアがあるかどうか疑問に思っていました。

遅延オブジェクトをいじっていましたが、それらで動作させる方法を見つけられれば、できませんでした。

この ajax 呼び出しを行う前に、任意の ajax 呼び出しを終了するとよいでしょうか? このように、サンフランシスコの通話は終了しますが、両方の都市との通話は通過します。

誰か考えはありますか?

ありがとう!

4

2 に答える 2

1

XMLHttpRequestほとんどがリクエストを返す変数に ajax を割り当てることができます。

その後、その特定のリクエストを中止できます。これらの行で試すことができます

var requestPool = null;

var request = $.ajax({
     ...
     ...
     beforeSend: function() {
         // Check if requestPool is not null
         // abort the previous request
         if(requestPool) {
             requestPool.abort();
         }
         // add the current request to the pool
         requestPool = request; 
     },
     success: function() {
         // your success callback
     },
     complete: function() {
        // no more requests
        requestPool = null;
    }
});
于 2013-07-19T20:16:02.543 に答える
0

$.get 呼び出しのハンドルを追跡している場合は、それらを中止できます。

おそらく、関連するすべての ajax 呼び出しを配列に格納し、それらをループして中止します。チェックボックスをクリックしたとき。

于 2013-07-19T20:17:32.887 に答える