【问题标题】:Call to jquery ajax - .fail vs. :error调用 jquery ajax - .fail vs. :error
【发布时间】:2012-10-21 12:55:25
【问题描述】:

我应该使用哪一个?

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

一种更适合错误处理吗?

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

【问题讨论】:

    标签: jquery ajax callback


    【解决方案1】:

    这两个选项是等价的。

    不过,promise 样式的接口(@98​​7654322@ 和 .done())允许您将创建请求的代码与处理响应的代码分开。

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

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

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

    【讨论】:

    • “从 jQuery 1.8 开始,不推荐使用 deferred.pipe() 方法。应该使用替代它的 deferred.then() 方法。” api.jquery.com/deferred.pipe
    【解决方案2】:

    只是为了刷新一下......

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

    jQuery Ajax

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

    【讨论】:

    • 这实际上是对jqXHR对象上的error()的弃用,而不是$.ajax本身,这是用户所指的。
    • @AdamGrant, $.ajax 返回 jqXHR,所以@slohr 是正确的。
    • 你是对的。我应该改写我的评论,对successerror 的弃用不适用于传递给$.ajax() 的对象级函数
    • 在这上面花了几个小时,是的,我发现弃用的是方法,而不是你传递给 $.ajax() 的选项。
    【解决方案3】:

    使用chainable deferred object promise 样式可以实现更简洁的结构并使用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');
    });
    

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多