调用jquery ajax - .fail vs.:error

Pet*_*eGO 71 ajax jquery callback

我应该使用哪一个?

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

错误处理更好吗?

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

要么

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

SLa*_*aks 40

这两个选项是等价的.

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

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

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

$.ajax(...)
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    });
Run Code Online (Sandbox Code Playgroud)

  • "从jQuery 1.8开始,不推荐使用deferred.pipe()方法.应该使用deferred.then()方法代替它." http://api.jquery.com/deferred.pipe/ (32认同)

小智 29

只是为了清新这个......

从jQuery 1.8开始,成功和错误方法已被弃用.

jQuery Ajax

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

  • 这实际上是对`jqXHR`对象的`error()`的弃用,而不是`$ .ajax`本身,这是用户所指的. (9认同)
  • 你是对的.我应该改写我的评论,对`success`和`error`的弃用不适用于传递给`$ .ajax()的对象级函数. (8认同)
  • @AdamGrant,`$.ajax`_返回_`jqXHR`,所以@slohr是正确的。 (2认同)
  • 花了几个小时就可以了,是的,我发现弃用是方法而不是你传给`$ .ajax()`的选项. (2认同)

ow3*_*w3n 5

使用可链接的延迟对象承诺样式可以实现更清晰的结构并使用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');
});
Run Code Online (Sandbox Code Playgroud)