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

时间:2012-06-07 12:31:05

标签: jquery

我编码如下:

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

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

4 个答案:

答案 0 :(得分:144)

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

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

  

弃用通知

     

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

如果您正在使用回调操作函数(例如使用方法链接),请使用.done().fail().always()代替success(),{{1 }和error()

答案 1 :(得分: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 */

});

答案 2 :(得分:6)

简单来说就是

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

如果它获取了info.text,那么它将发出警告,无论你添加什么功能,或者如果有任何无法从服务器检索info.text然后提醒或错误功能。

答案 3 :(得分:0)

当我们要在旧的现有应用程序中将JQuery从1.x迁移到2x或3.x时,我们将使用.done,.fail而不是success,error,因为JQuery up gradation将被弃用。例如,当我们调用服务器Web方法时,服务器将Promise对象返回给调用方法(Ajax方法),并且该Promise对象包含.done,.fail..etc方法,因此对于成功和失败我们将相同响应。下面是示例(用于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.
                });