success一直是jQuery中成功回调的传统名称,定义为ajax调用中的一个选项。但是,由于实现了
$.Deferreds更复杂的回调,因此
done是实现成功回调的首选方法,因为可以在any上调用它
deferred。
例如,成功:
$.ajax({ url: '/', success: function(data) {}});例如,完成:
$.ajax({url: '/'}).done(function(data) {});令人高兴的
done是,
$.ajax现在的返回值是一个可以绑定到应用程序其他任何地方的递延承诺。假设您要在几个不同的地方进行此ajax调用。而不是你的成功传递函数作为一个选项,以使这个Ajax调用的功能,你可以有函数返回
$.ajax本身并绑定你的回调
done,
fail,
then,或什么的。请注意,
always无论请求成功还是失败,该回调都会运行。
done仅在成功时触发。
例如:
function xhr_get(url) { return $.ajax({ url: url, type: 'get', dataType: 'json', beforeSend: showLoadingImgFn }) .always(function() { // remove loading image maybe }) .fail(function() { // handle request failures });}xhr_get('/index').done(function(data) { // do stuff with index data});xhr_get('/id').done(function(data) { // do stuff with id data});就可维护性而言,这样做的一个重要好处是,您已经将ajax机制包装在了特定于应用程序的功能中。如果您决定
$.ajax将来需要以不同的方式进行操作,或者使用其他的ajax方法,或者退出jQuery,则只需更改
xhr_get定义(确保返回一个promise或至少一个
done方法),以上述示例为例)。整个应用程序中的所有其他参考都可以保持不变。
您可以执行更多(更酷)的操作
$.Deferred,其中之一是
pipe即使
$.ajax请求本身成功,也可以触发服务器报告的错误失败。例如:
function xhr_get(url) { return $.ajax({ url: url, type: 'get', dataType: 'json' }) .pipe(function(data) { return data.responseCode != 200 ? $.Deferred().reject( data ) : data; }) .fail(function(data) { if ( data.responseCode ) console.log( data.responseCode ); });}xhr_get('/index').done(function(data) { // will not run if json returned from ajax has responseCode other than 200});$.Deferred
在此处了解更多信息:http- //api.jquery.com/category/deferred-
object/
注意 :从jQuery 1.8开始,
pipe不赞成使用
then以完全相同的方式使用。



