ajax成功的jQuery ajaxStop

时间:2011-02-03 10:47:09

标签: jquery ajax

我有一个jQuery插件,我需要将ajaxStop实现到它的一部分。 下面是我的代码中显示结构的片段(可能不是100%)。

我已经展示了如何将我的函数设置为方法,以防ajaxStop需要作为全局函数实现,不确定如何在当前设置中执行此操作。

我遇到的问题偶尔是ajaxStop即使我的ajax响应成功恢复也不会被解雇。

  1. 我可以从ajax成功回调中调用ajaxStop吗?
  2. 我应该在哪个元素上调用ajaxStop $()。ajaxStop OR $(this).ajaxStop
  3. 非常感谢您的帮助!

    也许有人在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);
    

1 个答案:

答案 0 :(得分:2)

只是对此的更新:

我最终使用的是计数器而不是AjaxStop。 在每个按钮单击时增加计数器。并且在ajax成功/错误减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);