78

问题

  1. 我们应该按照下面的建议更改我们的编码吗?
  2. .done()& success:.fail()&error:.always()&之间有区别complete:吗?

序言

我正在整理一个 jQuery.ajax 调用,我过去也成功地完成了该调用。像这样的东西:

    $.ajax(
    {
        url: someUrl,
        type: 'POST',
        data: someData,
        datatype: 'json',
        success: function (data) { someSuccessFunction(data); },
        error: function (jqXHR, textStatus, errorThrown) { someErrorFunction(); }
    });

在快速浏览一些文档时,我遇到了一个参考,指出从 jQuery 1.8 开始不推荐使用成功、错误和完成回调。要为最终删除准备代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

因此,我们应该开始编写这样的代码:

$.ajax( "example.php" )
    .done(function (data) { someSuccessFunction(data); })
    .fail(function (jqXHR, textStatus, errorThrown) { someErrorFunction(); })
    .always(function() { alert("complete"); });
4

1 回答 1

39

好吧,在那种特殊情况下这样做没有任何好处。

这些.done() .fail() .always()方法的重点是你可以

  1. 附加多个处理程序
  2. 在任何地方都可以这样做,而不仅仅是在打电话时$.ajax

如果您在$.ajax呼叫站点仅附加单个处理程序,那么这些优势并没有真正发挥作用。

所以你可以返回承诺,其他人可以附加他们自己的处理程序。

示例是在 ajax 请求后刷新插件:

$.ajaxPrefilter(function(opt, origOpt, jqxhr) {
    jqxhr.always(function() {
        $("[data-plugin]").plugin();
    });
});
于 2013-08-16T01:23:56.100 回答