jQuery ajax 请求作为延迟 - 包装失败回调

Posted

技术标签:

【中文标题】jQuery ajax 请求作为延迟 - 包装失败回调【英文标题】:jQuery ajax requests as Deferred - wrap fail callbacks 【发布时间】:2015-03-05 16:42:18 【问题描述】:

我的网络应用程序的所有 ajax 调用都在表单中

$.post(url, data, successCallback).fail(failCallback)

如果出现某些情况,我需要引入一种中止机制。

由于调用 .abort() 也会触发 failCallback,因此我正在尝试找出一种方法(如果有)来拦截中止失败并且不触发回调。

【问题讨论】:

可以在调用 abort 时向 xhr 对象添加一个属性,并在失败回调中检查该属性 【参考方案1】:

我不认为你真的可以这样做,当调用abort 时,ajax 请求失败,并且调用了 fail 方法。

我认为你会得到最接近的方法是检查错误并有条件地调用函数,因为中止会将abort 作为错误(和状态)抛出

$.post(url, data, successCallback).fail(function(xhr, status ,err) 
   if (err !== 'abort')
       failCallback();
);

FIDDLE

【讨论】:

感谢您的回复(也感谢@charlietfl),我担心这是不可能的。我找到了一些解决方案,但都假设在ajax 配置中使用error 属性。我的 failCallbacks 都特定于他们自己的请求(所以它不是一个通用的),但我想我会转换(或包装)它们以包含 abort 检查。 可能值得注意的是,.abort() 方法仅(自然地)在 jqXHR 承诺上可用。此类承诺通过.done().fail().always() 传播,但通过.then(),保证发出新的承诺。

以上是关于jQuery ajax 请求作为延迟 - 包装失败回调的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 调用失败。使用 Jquery .ajax 函数发出简单的请求

多个 AJAX 请求相互延迟

jquery学习笔记ajax

使用 jQuery 在失败时重试 AJAX 请求的最佳方法是啥?

jQuery-Mobile:ajax请求在changePage失败后停止工作

Ajax GET 请求后表单提交失败(无效的 CSRF 令牌)。怎么修?