AjaxComplete被频繁调用

6

I have this code:

$( document ).ajaxComplete(function( event, xhr, settings ) {
    console.log('test');
});

我打开了Chrome网络选项卡,只能看到一条记录(状态为200)。

但控制台显示:

(28) test

为什么会频繁执行?
2个回答

1
ajaxComplete 会在任何 AJAX 请求完成时触发,无论成功与否。
200 状态码 表示您的请求已经成功,但是正如您可以在 jQuery docs 中阅读到的那样,回调函数将在每次 AJAX 请求完成时触发。

因此,您可以检查您的请求重定向到哪个 URL,并仅处理您需要的请求。

无论如何(只是一个侧面的注意),我将使用内置的 AJAX 回调函数 complete,类似于这样:

$.ajax({
    url: url,
    data: { data },
    complete:function(){ 
        console.log('test'); 
    }
});

在网络选项卡中只有一个条目。 没有其他状态的条目,除了200。 console.log(settings.url) 显示相同的 URL 28 次,但这个 Ajax 请求只发送一次。 - phpjssql
ajaxComplete 每次都会触发,可能是插件在后台使用 ajax。如果可以的话,我建议您使用 AJAX complete 回调函数。 - CapitanFindus
我只能使用ajaxComplete。 有没有可能检查它是否是相同的请求,比如一个id? 我无法检查URL,因为它可以被多次请求。 - phpjssql
你可以尝试使用 ajaxSetup - CapitanFindus

1
你可以检查这些ajax的URL,并仅处理所需的内容:
$( document ).ajaxComplete(function( event, xhr, settings ) {
  console.log('Ajax request completed for: ' + settings.url);
  if ( settings.url === "ajax/test.html" ) {
    $( ".log" ).text( "Triggered ajaxComplete handler. The result is " +
      xhr.responseText );
  }
});

文档准备好时只需绑定一次:

$(function() {
    $( document ).ajaxComplete(function( event, xhr, settings ) {
      console.log('Ajax request completed for: ' + settings.url);
      if ( settings.url === "ajax/test.html" ) {
        $( ".log" ).text( "Triggered ajaxComplete handler. The result is " +
          xhr.responseText );
      }
    });
});

我收到了28次相同的URL,但这个Ajax请求只发送了一次。 - phpjssql
@phpjssql 确保你只绑定一次处理程序。 - Sergiy Kozachenko
当我在我的代码之前放置$( document ).unbind('ajaxComplete');时,它可以工作。 但是,我如何解决这个问题,而不需要解除绑定现有的完成事件呢? - phpjssql
你应该在文档准备就绪时只绑定一次,更新答案。 - Sergiy Kozachenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接