我是否应该对新的jQuery AJAX 代码使用.done()和.fail(),而不是success和error

3vpjnl9f  于 2022-11-03  发布在  jQuery
关注(0)|答案(4)|浏览(519)

我有这样的编码:

$.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()

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;
});
nr9pn0ug

nr9pn0ug1#

如user2246674所述,使用successerror作为 AJAX 函数的参数是有效的。
为了与先例回答保持一致,阅读doc:

弃用通知

在jQuery 1.8中,jqXHR.success()、jqXHR.error()和jqXHR.complete()回调将被弃用。要准备代码以备最终删除它们,请改用jqXHR.done()、jqXHR.fail()和jqXHR.always()。
如果使用回调操作函数(例如,使用方法链),请使用.done().fail().always(),而不要使用success()error()complete()

pjngdqdw

pjngdqdw2#

我想在@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 */

});
9q78igpj

9q78igpj3#

简而言之

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

如果它得到了info.text,那么它将报警,无论你添加什么功能,或者如果有任何无法从服务器检索info.text,那么报警或错误功能。

jc3wubiy

jc3wubiy4#

当我们在旧的现有应用程序中从1.x迁移到jQuery 2.x或3.x时,我们将使用.done、.fail而不是success、error,因为jQuery将弃用这些方法。( AJAX 方法)这些promise对象包含.done、.fail等方法。因此,我们将对成功和失败响应执行相同的操作。下面是一个示例(对于POST请求,我们可以使用与GET...等请求类型相同的方法构造请求类型):

$.ajax({
            type: "POST",
            url: url,
            data: '{"name" :"sheo"}',
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false
            }).done(function (Response) {
                  //do something when get response            })
           .fail(function (Response) {
                    //do something when any error occurs.
                });

相关问题