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 函数发出简单的请求
使用 jQuery 在失败时重试 AJAX 请求的最佳方法是啥?