9

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

$.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为什么它们的行为不同?

4

1 回答 1

21

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

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

如果您希望无论成功/失败都调用回调,请使用.always()

于 2013-04-21T08:10:49.887 回答