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

Ala*_*an2 152 jquery

我这样编码:

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

但是当我最后查看jQuery .ajax()文档时,似乎建议我应该像下面这样编码,或者至少它建议添加一个.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;
});
Run Code Online (Sandbox Code Playgroud)

更新

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

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

Mic*_*gue 156

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

为了与先前的答案保持一致,阅读文档:

弃用通知:

jq 1.8中将不推荐使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调.要准备最终删除的代码,请使用jqXHR.done(),jqXHR.fail()和jqXHR.always().

如果您使用的是回调处理函数(使用链式方法调用为例),使用.done(),.fail().always()代替success(),error()complete().

  • 我不同意.这些引用讨论了*callback-manipulation函数*(例如`.error`,`..success`)**被弃用以支持更通用的Deferred模式,但是`ajax`方法的*参数不被弃用*并且有效且可接受 - 即使在jQuery 1.9/2.0中也是如此!在所有当前形式中,`ajax`仍然返回Deferred; 可能已经附加的延迟回调. (51认同)
  • 老实说,我更喜欢"成功","失败","永远". (9认同)
  • @GregoryLewis来自JQuery 1.10源代码:`jqXHR.success = jqXHR.done;`. (3认同)
  • 哇,我也误读了文档。我从字面上认为$ .ajax的“成功” /“错误”选项被重写为“完成/失败”。只是回调方法链。老实说,我认为他们也应该切换选项名称。那让我难过了几个小时。 (3认同)
  • 在这里,jQuery 1.9 和 success:、error: 和 complete: 仍然可用。但是,我的问题是, .done() == 是否成功:? (2认同)

Ivi*_*pić 11

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

jqXHR.done() 是比较快的!

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

更新:

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

/* 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 */

});
Run Code Online (Sandbox Code Playgroud)

  • 你有任何可信和可核实的参考资料吗? (9认同)
  • 请提供任何可信的证据。 (2认同)

小智 6

简单来说

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

如果它获取info.text然后它会提醒你和你添加的任何功能,或者如果有任何无法从服务器检索info.text然后提醒或错误功能.