1

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,然后它清楚地表明上面的代码进行递归调用。

4

2 回答 2

3

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

为了防止这种情况,您可以执行以下操作:

$.ajaxSetup( { global: false } );

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

于 2013-05-18T07:15:57.533 回答
0

Yes: http://jsfiddle.net/GghtK/

ajaxStop() listens for all future ajax calls (you are creating an event listener to the ajaxStop event which jQuery fires after all outstanding ajax requests are completed) you are then creating a new ajax request from within the callback which will of course in return fire the ajaxStop event.

于 2013-05-18T07:19:16.680 回答