jQuery Deferred .then()在.fail()之后不被调用

时间:2013-04-21 08:07:02

标签: jquery jquery-deferred

我正在使用jQuery.Deferred并注册donefailthen处理程序:

$.when( some_ajax(url) )
    .done(function(result){})
    .fail(function(){})
    .then(function(){}); //just like that, with a single parameter

我发现当我的ajax调用成功时,将按此顺序调用donethen个回调。但是当ajax失败时,会调用fail回调,但我没有进入then回调。

我已阅读jQuery.Deferred文档但无法找到有关此行为原因的提示。

使用always代替then时,会在两种情况下调用它 - 成功和失败(首先调用done / fail,然后调用always叫做)。该文档似乎并未表明我所描述的场景中alwaysthen之间的预期差异,为什么它们的行为有所不同?

1 个答案:

答案 0 :(得分:19)

.then()的语法是.then(successCallback, failureCallbacl),这就是为什么在成功的情况下都会被调用,如果失败,只会调用fail

在您的情况下,您只传递一个回调到.then()方法,它将被注册为成功回调,因此您有两个成功回调,一个注册done()另一个注册.then() 1}}。但是对于错误情况,您只有一个回调注册.fail()

如果您想要在不考虑成功/失败的情况下调用回调,请使用.always()