79

我应该使用哪一个?

有什么理由使用其中一个而不是另一个?

一种更适合错误处理吗?

$.ajax({
    url: url,
    data: { start: start, end: end }
}).done(function(data, textStatus, jqXHR) {
    $('#myElement').append(data);
}).fail(function() {
    // report error    
});

或者

$.ajax({
    url: url,
    data: { start: start, end: end },
    success: function(data, textStatus, jqXHR) {
        $('#myElement').append(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        // report error
    }
});
4

3 回答 3

44

这两个选项是等效的。

但是,promise 样式的接口 (.fail().done()) 允许您将创建请求的代码与处理响应的代码分开。

您可以编写一个发送 AJAX 请求并返回 jqXHR 对象的函数,然后在别处调用该函数并添加一个处理程序。

当与该.pipe()函数结合使用时,promise 样式的接口还可以帮助减少在进行多个 AJAX 调用时的嵌套:

$.ajax(...)
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    });
于 2012-10-31T22:51:26.863 回答
33

只是为了刷新这个...

从 jQuery 1.8 起,成功和错误方法已被弃用。

jQuery 阿贾克斯

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除准备代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

于 2015-02-03T17:34:07.450 回答
4

使用可链接的延迟对象承诺样式允许更简洁的结构和使用always

let data = {"key":"value"}

$.ajax({
    type: 'PUT',
    url: 'http://example.com/api',
    contentType: 'application/json',
    data: JSON.stringify(data), 
}).done(function () {
    console.log('SUCCESS');
}).fail(function (msg) {
    console.log('FAIL');
}).always(function (msg) {
    console.log('ALWAYS');
});
于 2018-04-01T13:56:35.883 回答