2011-02-03 102 views
1

我有一個jQuery插件,我需要實現ajaxStop到它的一部分。 下面是從我的代碼,以顯示結構的一個片段(可能不是100%)。jQuery的ajaxStop在阿賈克斯成功

我已經表明我的功能是如何設置的方法的情況下,ajaxStop需要實現作爲一個全球性的功能,不知道我會怎麼做,在當前的設置。

我有,即使我的Ajax響應回來成功是偶爾ajaxStop不被解僱的問題。

  1. 我可以從ajax成功回調調用ajaxStop嗎?
  2. 我應該叫什麼元素)ajaxStop ajaxStop上 $(或$(這).ajaxStop

非常感謝您的幫助!

也未嘗不是任何人有過在Mac上使用ajaxStop麻煩? 我只是找不到一個解決方案,爲什麼這一直不工作。

我覺得ajaxStop並不十分可靠:(

(function($) { 

$.fn.doRentalButtons = function($params) { 

    var newMethods = { 

     startAction:function() { 
      var $button = $('a.button'); 
      $button.click(function(){ 
       var params = {one:'something',two:'morethings'} 
       $(this).doAjax(params); 
      }); 
     }, 

     doAjax:function(params) { 

      $current_button = $(this); 
      $container_div = $('#container'); 

      $.ajax({ 
       type: 'POST', 
       url: 'whatever.html', 
       data: params, 
       success: function(data) { 
        //dostuff 

        var jQueryObject = 
        if (global_var_hide == 0) { 
         $(this).afterPostRequests($current_button); 
        } 
       }() 
      }); 
     }, 

     afterPostRequests:function($current_button) { 
      $().ajaxStop(function(){ 
       $(this).show(); 
       $(this).positionDiv($current_button); 
      }); 
     } 
    }; 

    $.each(newMethods, function(i) { 
     $.fn[i] = this; 
    }); 
}; 

})(jQuery); 

回答

2

只是一個更新這個:

最後我用一個計數器來代替AjaxStop 增量上的每個按鈕點擊櫃檯。在

阿賈克斯成功/錯誤減1關閉計數器。然後,我只運行我的Ajax請求,如果計數器== 0

ŧ他似乎爲我所需要的而工作。但這看起來像是一個臨時解決方案,可能有更好的方法。

(function($) { 

$.fn.doRentalButtons = function($params) { 

    var ajax_busy = 0; 

    var newMethods = { 

     startAction:function() { 
      var $button = $('a.button'); 
      $button.click(function(){ 
       var params = {one:'something',two:'morethings'} 
       $(this).doAjax(params); 
      }); 
     }, 

     doAjax:function(params) { 

      $current_button = $(this); 
      $container_div = $('#container'); 

      ajax_busy++; 

      $.ajax({ 
       type: 'POST', 
       url: 'whatever.html', 
       data: params, 
       success: function(data) { 
        //dostuff 

        ajax_busy--; 

        var jQueryObject = $('#myDiv'); 
        if (ajax_busy == 0) { 

         jQueryObject.show(); 
         jQueryObject.positionDiv($current_button); 

        } 
       }, 
       error: function() { 
        ajax_busy--; 
       } 
      }); 
     } 
    }; 

    $.each(newMethods, function(i) { 
     $.fn[i] = this; 
    }); 
}; 

})(jQuery);