jquery :: ajaxStop()与jquery :: ajaxComplete()

时间:2010-12-11 22:10:37

标签: jquery ajax

在哪个时间使用。

http://api.jquery.com/的文档中:

对于ajaxStop(),它说:

  

描述:在所有Ajax请求完成后注册要调用的处理程序。这是一个Ajax事件。

对于ajaxComplete(),它说:

  

描述:注册Ajax请求完成时要调用的处理程序。这是一个Ajax事件。

从我所看到的ajaxComplete()更灵活,因为:

  

无论Ajax请求是什么完成,都会调用所有ajaxComplete处理程序。如果我们必须区分请求,我们可以使用传递给处理程序的参数。每次执行ajaxComplete处理程序时,都会传递事件对象,XMLHttpRequest对象以及在创建请求时使用的设置对象。

有人可以解释每个人的用途以及每个人的适当用法。在我最近构建的应用程序中,当我的ajax调用完成时,我依靠ajaxStop()来触发。然后我将解析返回的数据以获得服务器端操作的结果。现在我开始怀疑我是否应该在各种情况下使用ajaxComplete()或两者的组合。

我们对此表示赞赏。

3 个答案:

答案 0 :(得分:58)

嗯,简短的版本是它们用于不同的目的,所以答案将是“两种情况的组合适用于各种情况”选项。基本规则是:

  • .ajaxComplete() - 针对完成的每个请求运行,当您想对每个请求/结果执行某些操作时,请使用此选项。请注意,这不会替换success处理程序,因为解析的数据不是参数之一(即使出现错误也会运行) - 在某些请求情况下,您可能需要.ajaxSuccess()代替。
  • .ajaxStop() - 在每批请求完成时运行,通常您会将其与.ajaxStart()结合使用,以显示/隐藏“正在加载... “某种指标 - 或者在一批AJAX请求完成后再执行其他操作,就像主要的最后一步一样。

如果您使用它来解析数据,可能有更好的方法,在这种情况下$.ajaxSetup(),您可以在其中指定一个success处理程序来获取已经解析的数据(例如JSON)响应将是对象),像这样:

$.ajaxSetup({
  success: function(data) { 
    //do something with data, for JSON it's already an object, etc.
  }
});

答案 1 :(得分:8)

只要ajax请求成功完成或出错,就会调用

ajaxComplete

所有 ajax请求完成时,将调用

ajaxStop。因此,与ajaxComplete不同,如果仍有正在进行的请求,则不会调用它。

如果要为每个ajax请求执行要执行的操作,则应使用第一个。

答案 2 :(得分:3)

通常,您希望使用ajaxComplete。这是因为只有在没有更多的ajax请求仍在等待返回时才会触发ajaxStop。当你一次发送一个ajax请求时,这似乎没有什么不同,但想象一下,在你发送请求A之后网络发生了减速,并且当请求B在5秒后发送时它比请求A早回来。 。然后ajaxStop只会在请求A返回后触发一次,ajaxComplete将同时触发。

您使用ajaxStop的情况是您一次发送多个ajax请求...例如提交一系列3个表格...并希望在所有3个表格成功完成后收到通知。当然,您可以使用ajaxComplete

中的计数器实现相同的功能

但是,从你的问题的声音......你想要解析每个ajax响应的数据...通常这将在ajax成功回调中完成,例如

$.ajax({
   url: "blah",
   data: "blah",
   success: function (data) { /* Code in here */ }
});
相关问题