我应该使用.done()和.fail()为新的jQuery AJAX代码,而不是成功和错误

我有这样的编码:

$.ajax({ cache: false, url: "/Admin/Contents/GetData", data: { accountID: AccountID }, success: function (data) { $('#CityID').html(data); }, error: function (ajaxContext) { alert(ajaxContext.responseText) } }); 

但是,当我看到最后的jQuery .ajax()文档似乎build议我应该这样编码,至less它build议添加一个.done()和一个.fail()

 var request = $.ajax({ cache: false, url: "/Admin/Contents/GetData", data: { accountID: AccountID } }); request.done(function (data) { xxx; }); request.fail(function (jqXHR, textStatus) { xxx; }); 

更新

如果我这样写代码是一样的还是有一些优势,把它分成三个?

 $.ajax({ cache: false, url: "/Admin/Contents/GetData", data: { accountID: AccountID } }).done(function (data) { xxx; }).fail(function (jqXHR, textStatus) { xxx; }); 

如user2246674所述,使用successerror作为ajax函数的参数是有效的。

为了与先例答案一致,阅读文档:

弃用声明

在jQuery 1.8中,jqXHR.success(),jqXHR.error()和jqXHR.complete()callback将被弃用。 要准备好代码以便最终删除它们,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

如果使用callback操作函数(例如使用方法链),请使用.done() .fail().always()而不是success()error()complete()

我想在@Michael Laffargue的post上添加一些内容:

jqXHR.done()更快!

jqXHR.success()在callback中有一些加载时间,有时可能会矫枉过正脚本。 我在之前很难find。

更新:

使用jqXHR.done()jqXHR.fail()jqXHR.always()你可以更好地处理一个Ajax请求。 一般来说,您可以在某些variables或对象中定义ajax,并在代码的任何部分使用该variables或对象,并更快地获取数据。 很好的例子:

 /* Initialize some your AJAX function */ function call_ajax(attr){ var settings=$.extend({ call : 'users', option : 'list' }, attr ); return $.ajax({ type: "POST", url: "//exapmple.com//ajax.php", data: settings, cache : false }); } /* .... Somewhere in your code ..... */ call_ajax({ /* ... */ id : 10, option : 'edit_user' change : { name : 'John Doe' } /* ... */ }).done(function(data){ /* DO SOMETHING AWESOME */ }); 

简而言之,

 $.ajax("info.txt").done(function(data) { alert(data); }).fail(function(data){ alert("Try again champ!"); }); 

如果它获得info.text,那么它会提醒和无论你添加的function,或者如果有任何不能从服务器检索info.text然后警报或错误的function。