来自JQuery Documentation
从 jQuery 1.5 开始,$.ajax() 返回的 jqXHR 对象实现了 Promise 接口,为它们提供了 Promise 的所有属性、方法和行为(有关更多信息,请参阅Deferred object)。这些方法采用一个或多个在$.ajax() 请求终止时调用的函数参数。这允许您在单个请求上分配多个回调,甚至在请求完成后分配回调。 (如果请求已经完成,则立即触发回调。) jqXHR 对象的可用 Promise 方法包括:
jqXHR.done(function( data, textStatus, jqXHR ) {});
成功回调选项的替代构造,请参阅deferred.done()了解实现细节。
jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});
错误回调选项的替代构造,.fail() 方法替换了已弃用的 .error() 方法。实现细节参考 deferred.fail()。
jqXHR.always(function( data|jqXHR, textStatus, jqXHR|errorThrown ) { });
(在 jQuery 1.6 中添加)
完整回调选项的替代构造,.always() 方法替换了已弃用的 .complete() 方法。
响应成功的请求,该函数的参数与.done()的参数相同:data、textStatus和jqXHR对象。对于失败的请求,参数与.fail() 的参数相同:jqXHR 对象、textStatus 和errorThrown。实现细节参考deferred.always()。
jqXHR.then(function( data, textStatus, jqXHR ) {}, function( jqXHR, textStatus, errorThrown ) {});
结合了.done() 和.fail() 方法的功能,允许(从jQuery 1.8 开始)底层的Promise 被操纵。实现细节参考deferred.then()。
弃用通知: 自 jQuery 3.0 起,jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调已被删除。您可以使用
jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。