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

Chr*_*ris 38 ajax jquery

哪个是在哪个时候使用.

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

对于ajaxStop(),它说:

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

对于ajaxComplete(),它说:

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

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

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

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

我们很感激.

Nic*_*ver 58

嗯,简短的版本是他们服务于不同的目的,所以答案将是"两种情况的组合适用于各种情况"选项.基本规则是:

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

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

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

  • @Chris - `.ajaxStop()`当一批请求完成时触发,这意味着如果你触发5,无论它们返回什么顺序,它都会在第5个完成时触发,因此没有AJAX请求等待结果那一点,你已经完成了.这意味着它没有关于已完成的特定请求的任何信息,因为它不是*for*a request,它适用于所有请求.`ajaxComplete`为*each*请求触发,每个请求都使用`XMLHttpRequest`对象...所以你有一些关于处理请求的信息......这一切都取决于你实际做了什么,哪个是合适的. (8认同)

sje*_*397 8

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

ajaxStop所有 ajax请求完成时调用.因此ajaxComplete,如果仍有正在进行的请求,则不会调用它.

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