【问题标题】:jquery::ajaxStop() versus jquery::ajaxComplete()jquery::ajaxStop() 与 jquery::ajaxComplete()
【发布时间】:2011-05-24 02:02:17
【问题描述】:

什么时候用哪个。

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

对于 ajaxStop() 它说:

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

对于 ajaxComplete() 它说:

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

据我所知,ajaxComplete() 更灵活,原因是:

所有 ajaxComplete 处理程序都会被调用,而不管 Ajax 请求已完成。如果我们必须区分请求,我们可以使用传递给处理程序的参数。每次执行 ajaxComplete 处理程序时,都会传递事件对象、XMLHttpRequest 对象和用于创建请求的设置对象。

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

感谢您的想法。

【问题讨论】:

标签: jquery ajax


【解决方案1】:

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

  • .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.
  }
});

【讨论】:

  • 我收到了 ajax 成功调用。我应该什么时候使用 ajaxStop 而不是 complete。
  • @Chris - .ajaxStop() 在一批请求完成时触发,这意味着如果您触发 5,无论它们返回的顺序是什么,它都会在第 5 个完成时触发,因此没有 AJAX此时请求等待结果,您就完成了。这意味着它没有关于完成的特定请求的任何信息,因为它不是 for 请求,而是针对所有请求。 ajaxComplete 触发 each 请求,每个请求都有 XMLHttpRequest 对象......所以你有一些关于要处理的请求的信息......这一切都取决于你实际上在做什么至于哪个合适。
  • 啊,我花了一些读数和 cmets 才得到它。关键是.ajaxStop() 在没有未完成的ajax 请求时运行,而.ajaxComplete() 在每个完成的ajax 请求之后运行。谢谢!
【解决方案2】:

一般来说,您想使用ajaxComplete。这是因为ajaxStop 只会在没有更多 ajax 请求仍在等待返回时触发。当您一次发送一个 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 */ }
});

【讨论】:

    【解决方案3】:

    每当 ajax 请求完成时调用ajaxComplete,无论成功还是出错。

    ajaxStopall ajax 请求完成时调用。所以不像ajaxComplete,如果还有请求在进行中就不会被调用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 2011-04-13
      • 2021-01-07
      • 1970-01-01
      相关资源
      最近更新 更多