【问题标题】:Deferred implementation for jQuery Ajax global handlersjQuery Ajax 全局处理程序的延迟实现
【发布时间】:2021-12-12 20:02:01
【问题描述】:

根据 jQuery 文档,global Ajax event handlers 必须使用文档上的回调函数来实现。否则,本地$.ajax() 使用promises 实现事件。

有没有什么方法可以使用 promises 方法来处理全局 Ajax 事件,例如 .done().fail().always().then()

我正在寻找一种方法来为不依赖于$(document) 的全局 ajax 事件声明事件处理程序,例如:

// current way of doing this:
// $(document).ajaxSuccess(_handleAjaxSuccess);
// 
// some ideas of what it could look like:
// $.ajaxSuccess(_handleAjaxSuccess);
// $.ajax.done(_handleAjaxSuccess);
// $.ajaxSetup({ done: _handleAjaxSuccess });

【问题讨论】:

  • 请详细说明您想要做什么

标签: jquery ajax events promise jquery-events


【解决方案1】:

不,您不能使用 promises 方法 .done().fail().always().then() 处理全局 Ajax 事件。

这些是 Promise 方法,因此 Promise 需要在它们可用之前存在。

根据定义,jQuery 的全局 ajax 事件处理程序在定义时不附加到任何特定的 Promise。相反,它们由 jQuery 存储并在内部调用每当某些 ajax 事件发生。

作为 jQuery 的用户,我们不需要担心这些内部调用是如何进行的,但我们可以非常确定 .done().fail().always().then() 中的一种或其他方法参与其中。

如果您想了解更多,可以深入研究 jQuery 源代码,但我怀疑额外的理解会特别有价值。

【讨论】:

  • 嗨,@Roamer,我实际上已经深入研究了 jquery 源代码并得到了 jquery 论坛的支持。不支持它,但它感觉奇怪的是 Ajax 的一些全局处理是在 jquery 上下文 ($) 上完成的,而有些是在文档上下文 ($(document)) 上完成的。
  • 如果有帮助,他们可以编写 API,以便我们调用类似 jQuery.addGlobalAjaxHandler('complete', function() {...}) 的东西,使 document 的附件对我们不可见。由于某种原因(可能是历史原因),它们最终到达了它们所在的位置。我认为这只是接受现状的问题。就个人而言,对此没有任何问题,尽管有一次我的心态和你的一样。这是一个年龄问题。
【解决方案2】:

虽然jqXHR 实例支持promises 接口,但jquery 上的全局Ajax 事件不支持它,目前没有实现它的计划(jquery forum)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2020-12-21
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多