Javascript 在问题解决后,我可以强制jQuery/Ajax执行失败处理程序吗?
举个例子来说明我想做什么。这是我通常会做的:Javascript 在问题解决后,我可以强制jQuery/Ajax执行失败处理程序吗?,javascript,jquery,jquery-deferred,Javascript,Jquery,Jquery Deferred,举个例子来说明我想做什么。这是我通常会做的: function success(data, status, jqxhr){ if ( data.error ) return failure(jqxhr, status, data.error); // process data } function failure(jqxhr, status, err){ ... } $.ajax( ... ) .done(success) .fail(failure) 有没有办法
function success(data, status, jqxhr){
if ( data.error )
return failure(jqxhr, status, data.error);
// process data
}
function failure(jqxhr, status, err){
...
}
$.ajax( ... )
.done(success)
.fail(failure)
有没有办法,我只能用匿名函数来实现这一点,就像这样
$.ajax( ... )
.done(function(data, status, jqxhr){
if(data.error)
// what do i need to do here to jump in to the fail handler?
})
.fail(function(jqxhr, status, err){
...
})
我需要在这里做什么才能跳转到失败处理程序
不要使用done
,而是使用then
来映射承诺的结果。通过,您可以“抛出”错误并拒绝产生的承诺,以便执行失败处理程序
$.ajax(…)
.then(function(data, status, jqxhr){
if (data.error)
return $.Deferred().reject(data.error);
else
return data; // if you want to return multiple arguments, you'd use
// $.Deferred().resolve(data, status, jqxhr);
})
.done(function(data) {
…
})
.fail(function(jqxhr, status, err){
…
});
延迟对象的状态只能设置一次…我知道。还有什么方法可以强制执行失败处理程序吗?从技术上讲,您可以使用goto。但是在实践中最好不要这样做。使用
.always()
?@NabilKadimi,那么我需要额外的检查,无论是在成功还是失败后调用always,但这是一个想法。我知道,这必须是可能的!谢谢我遇到过then
处理程序,但从未完全理解它的用途。但是当我们返回新的$.Deferred()
对象时,我们失去了对.abort()
方法jqXHR
的访问权$.Deferred()
对象没有它。@manakor:当您使用然后
时,总是会丢失它,这与回调返回值无关。如果需要abort
,请在将promise回调链接到jqXHR
对象之前存储对该对象的引用。