0

ビュー3でDrupal7を使用しています。BetterExposedFiltersモジュールをインストールしました。いくつかのフィルターを公開していて、ajaxを使用しているので、たとえばチェックボックスを変更したり値を選択したりすると、ajaxリクエストが発生します。通常、すべてが正常に機能します。

しかし、私が処理できない問題があります:/基本的に、選択値を変更すると、ajaxリクエストが送信されます。このリクエストの結果が出る前に、select値を再度変更しましたが、ajaxリクエストはありません。別のajaxリクエストを送信したり、既存のリクエストを中止したりすることはできません。

だから私の質問は、このajaxリクエストを中止し、すぐに次のリクエストを送信する方法ですか?

4

2 に答える 2

4

同じ問題が発生し、コアファイルを変更せずに解決できました。アイデアは、jQueryのグローバルajaxSend()イベントをリッスンし、現在のリクエストのjqXHRオブジェクトを保存してから、フィルターのクリックハンドラーで、リクエストがまだ完了しているかどうかを確認し、完了していない場合は中止することです。したがって、コードは次のようになります。

var filterXHR = null;
$(document).ajaxSend(function (event, jqXHR, settings) {
  filterXHR = jqXHR; // cache XHR object for current ajax request
});

// event handler for when a filter is selected/changed/etc.
$('#filters-block .form-item a').click(function () {

  // check if there is a previous request that has not yet completed
  if (filterXHR && filterXHR.readyState != 4) {
    // abort ajax request
    filterXHR.abort();

    // subsequent requests will add their own progress indicator,
    // so you probably want to remove the old one here 
    $('.ajax-progress').remove(); 
  }

  // submit exposed form, do other stuff, etc.. 
});

[古い投稿を復活させるための一般的に悪いインターネットエチケットを知っていますが、これは私が情報を探していたときにグーグルで出てきた最初の(そして唯一の)意味のある結果だったので、ここで私の解決策を共有するのが適切だと思いました同様の問題を抱えてこのページにたどり着く可能性のある他の人の利益。]

于 2013-06-04T22:33:24.240 に答える
0

実際、私はそれを管理しています:)

Drupalフォルダーのajax.jsにあるいくつかのプロトタイプを上書きします。

  • 条件を変更します。if (ajax.ajaxing){ ... }
  • 送信要素の無効化をオフにしました
  • current_ajax現在のajaxリクエストの変数を追加して、実行できるようにしますcurrent_ajax.abort();
于 2012-10-17T09:55:49.283 に答える