首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我是否应该为新的jQuery AJAX代码使用.done()和.fail(),而不是使用成功和错误

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

Stack Overflow用户
提问于 2012-06-07 20:31:05
回答 4查看 303.3K关注 0票数 187

我的代码是这样的:

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

但是,当我在最后查看jQuery .ajax() documentation时,它似乎建议我应该像下面这样编码,或者至少它建议添加一个.done()和一个.fail()

代码语言:javascript
复制
var request = $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
});

request.done(function (data) {
    xxx;
});
request.fail(function (jqXHR, textStatus) {
    xxx;
});

更新

如果我像这样编写代码,它是相同的,还是将其一分为三有一些好处?

代码语言:javascript
复制
$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
}).done(function (data) {
    xxx;
}).fail(function (jqXHR, textStatus) {
    xxx;
});
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-07 20:35:01

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

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

弃用通知

jqXHR.success()、jqXHR.error()和jqXHR.complete()回调在jQuery 1.8中将被弃用。要为最终删除它们的代码做好准备,请改用jqXHR.done()、jqXHR.fail()和jqXHR.always()。

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

票数 181
EN

Stack Overflow用户

发布于 2016-12-21 17:16:12

我想在@Michael Laffargue的帖子上添加一些东西:

jqXHR.done()更快!

jqXHR.success()在回调中有一些加载时间,有时可能会过度杀死脚本。我以前发现这很难。

更新:

使用jqXHR.done()jqXHR.fail()jqXHR.always(),您可以更好地处理ajax请求。通常,您可以在一些变量或对象中定义ajax,并在代码的任何部分使用该变量或对象,从而更快地获取数据。一个很好的例子:

代码语言:javascript
复制
/* 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 */

});
票数 13
EN

Stack Overflow用户

发布于 2017-03-18 05:20:28

简而言之

代码语言:javascript
复制
$.ajax("info.txt").done(function(data) {
  alert(data);
}).fail(function(data){
  alert("Try again champ!");
});

如果它得到了info.text,那么它就会发出警报,无论你添加了什么函数,或者如果有任何函数,如何无法从服务器检索info.text,那么它就会发出警报或错误函数。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10931836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档