2011-02-03 103 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);