调用jquery ajax - .fail vs.:error

时间:2012-10-31 22:49:46

标签: jquery ajax callback

我应该使用哪一个?

有没有理由使用一个而不是另一个?

错误处理更好吗?

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

OR

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

3 个答案:

答案 0 :(得分:38)

这两个选项是等效的。

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

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

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

$.ajax(...)
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    });

答案 1 :(得分:28)

只是为了清新起来...

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

jQuery Ajax

  

弃用注意:自jQuery 1.8起,不推荐使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。要准备最终删除的代码,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

答案 2 :(得分:1)

使用chainable deferred object承诺样式可以使结构更清晰并使用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');
});