我正在使用jQuery.Deferred并注册done
,fail
和then
处理程序:
$.when( some_ajax(url) )
.done(function(result){})
.fail(function(){})
.then(function(){}); //just like that, with a single parameter
我发现当我的ajax调用成功时,将按此顺序调用done
和then
个回调。但是当ajax失败时,会调用fail
回调,但我没有进入then
回调。
我已阅读jQuery.Deferred文档但无法找到有关此行为原因的提示。
使用always
代替then
时,会在两种情况下调用它 - 成功和失败(首先调用done
/ fail
,然后调用always
叫做)。该文档似乎并未表明我所描述的场景中always
和then
之间的预期差异,为什么它们的行为有所不同?
答案 0 :(得分:19)
.then()
的语法是.then(successCallback, failureCallbacl),这就是为什么在成功的情况下都会被调用,如果失败,只会调用fail
。
在您的情况下,您只传递一个回调到.then()
方法,它将被注册为成功回调,因此您有两个成功回调,一个注册done()
另一个注册.then()
1}}。但是对于错误情况,您只有一个回调注册.fail()
如果您想要在不考虑成功/失败的情况下调用回调,请使用.always()