web-dev-qa-db-ja.com

すべてのajax呼び出しの前後に特定のアクションを起動する方法

JQueryとjQuery UIを使用しています。ユーザーがajax呼び出しを複数回呼び出すことがあるのは、呼び出しをクリックした直後にボタン/リンクが無効にならないためです。それを防ぐために、「beforeSend」アクションでボタン/リンクを無効にします。

これは私にとって典型的なAjaxコールのようです:

   $.ajax({
      type: "POST",
      url: "someURL"
      data: "someDataString",
      beforeSend: function(msg){
        $(".button").button("disable");
      },
      success: function(msg){
        $(".button").button("enable");
        // some user Feedback
      }
    });

しかし、このボタン無効ロジックをすべてのAjax呼び出しに追加したくありません。/afterおよびajax-callの前に毎回呼び出される関数をグローバルに定義する方法はありますか?

30
Pascal Klein

それらを登録するにはgloballyを使用します

ajaxStart または ajaxSend イベント

と一緒に

ajaxComplete または ajaxStop event

$(".button").ajaxStart(function(){
      $(this).attr("disabled","disabled");
});


$(".button").ajaxStop(function(){
      $(this).attr("disabled","");
});
6
Caspar Kleijne

はい、各ページでこの関数を呼び出すことにより、すべてのajax呼び出しのデフォルトを設定できます。 http://api.jquery.com/jQuery.ajaxSetup/

また、デフォルトを使用したくないajax呼び出しがある場合は、その特定のajax呼び出しに対してそのオプションを定義するだけです。

2
Brian Ball

イベントハンドラを送信イベントにバインドして、送信アクションが呼び出されるたびにアクションを呼び出すこともできます。それについて読む こちら 。それ以外の場合は、 AjaxSetup がトリックを行うための別の良い方法です。

0
Rob