191

我这样编码:

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

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

4 回答 4

182

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

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

弃用通知

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

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

于 2012-06-07T12:35:00.503 回答
14

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

jqXHR.done()是比较快的!

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

更新:

使用jqXHR.done(),您可以更好地使用 ajax 请求进行操作jqXHR.fail()jqXHR.always()一般来说,您可以在某个变量或对象中定义 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 */

});
于 2016-12-21T09:16:12.013 回答
12

简单来说

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

如果它获得了 info.text,那么它将发出警报以及您添加的任何功能,或者如果无法从服务器检索 info.text,则发出警报或错误功能。

于 2017-03-17T21:20:28.190 回答
1

当我们要在旧的现有应用程序中将 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.
                });
于 2019-12-04T06:17:07.323 回答