jQuery ajaxStop()会进行递归调用吗?如果是这样,如何阻止它?

时间:2013-05-18 07:07:21

标签: jquery

我在门户网站上显示Ajax login form各种用户操作,一旦成功登录,我想更新一些div's,因为我正在使用以下代码,

 $(document).ajaxStop(function(){

        $.get($(location).attr('href'),function(html){
        var $html = $(html);
        $('#topBar').html($html.find('#topBar'));
        $('#commentsForm').html($html.find('#commentsForm'));
        });
  });

以上代码是否会导致任何递归Ajax调用?目前它按预期工作但我想清楚地知道它。

更新

我将log保留在ajaxStop的末尾,然后递归打印log message,然后清楚地显示上面的代码进行递归调用。

2 个答案:

答案 0 :(得分:3)

我认为这会导致递归。完成所有其他AJAX调用后,此处理程序将调用。它将使用$.get()启动一个新的AJAX调用,一旦完成,它将触发处理程序,它将调用$.get(),依此类推。

为了防止这种情况,你可以这样做:

$.ajaxSetup( { global: false } );

阻止全局AJAX处理程序运行。或者使用等效的$.get()调用替换$.ajax(),并在其options参数中使用global: false

答案 1 :(得分:0)

是:http://jsfiddle.net/GghtK/

ajaxStop()侦听所有未来的ajax调用(您正在创建一个事件监听器,以便在完成所有未完成的ajax请求后jQuery触发ajaxStop事件)然后您从内部创建一个新的ajax请求回调当然会引发ajaxStop事件。