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 */ } });