jQuery的:: ajaxStop()与jQuery :: ajaxComplete()

哪个在哪个时间使用。

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

对于ajaxStop()它说:

描述:注册一个处理程序,当所有的Ajax请求都完成时被调用。 这是一个Ajax事件。

而对于ajaxComplete()它说:

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

从我可以看到ajaxComplete()更灵活,因为:

不pipe什么Ajax请求已经完成,所有ajaxComplete处理程序都被调用。 如果我们必须区分这些请求,我们可以使用传递给处理程序的参数。 每次执行ajaxComplete处理程序时,都会传递事件对象,XMLHttpRequest对象以及创build请求时使用的设置对象。

有人可以解释每个是什么和每个适当的用法。 在我最近build立的应用程序中,当我的ajax调用完成时,我依靠ajaxStop()来触发。 然后我将parsing返回的数据,以获得服务器端操作的结果。 现在我开始怀疑是否应该使用ajaxComplete()来代替或者两者的组合。

感谢赞赏。

那么简短的版本就是为了不同的目的,所以答案就是“两种情况的结合”select。 基本规则是:

  • .ajaxComplete() – 针对每个完成的请求运行,当您想要对每个请求/结果执行某些操作时使用它。 请注意,这不会取代success处理程序,因为parsing的数据不是参数之一(即使出现错误也会运行) – 您可能需要在某些每个请求的情况下使用.ajaxSuccess()
  • .ajaxStop() – 当每批请求完成时运行,通常你会使用这个结合.ajaxStart()来显示/隐藏某种types的“加载…”指示器或者做一些别的事情一批AJAX请求完成,就像主控的最后一步。

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

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

ajaxComplete在ajax请求完成时调用,不pipe是成功的还是错误的。

所有 ajax请求完成时调用ajaxStop 。 所以不像ajaxComplete ,如果还有一个请求正在进行,它将不会被调用。

你应该使用第一个,如果你想要执行的操作应该为每个Ajax请求完成。

一般来说,你想使用ajaxComplete 。 这是因为只有当没有更多的Ajax请求还在等待返回时才会触发ajaxStop 。 当您一次发送一个ajax请求时,这可能看起来并不一样,但是想象一下,在您发送请求A之后networking发生了减速,并且在请求B发送5秒钟之后,它比请求A更早地返回。那么ajaxStop只会在请求A返回后触发一次,而ajaxComplete同时触发。

你使用ajaxStop是,当你一次发送多个ajax请求时,例如提交一系列的3个表单,并希望在所有3个表单成功完成时得到通知。 当然,你可以用ajaxComplete一个计数器来实现相同的function

然而,从你的问题的声音…你想parsing每个Ajax响应的数据…通常这将在Ajax成功callback,例如

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