jQuery ajax()使用成功,错误和完成vs .done()、. fail()和always()


75

问题

  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"); });

1
我更喜欢第二种方法...使用了ajax返回的promise
Arun P Johny

8
回调不被弃用。jqxhr对象上的相关方法是。

我同意阿伦(Arun)的观点,也个人认为这更容易阅读
-Rooster

1
我不是在寻找有关偏好的评论和陈述,而是想了解差异(如果有)。
PostureOfLearning

14
对于那些不知道jqxhr对象是什么的人,Crazy Train的含义是“不建议使用回调。jqxhr对象的相关方法是。” 是.done()替换.success().fail()替换.error().always()替换.complete()。的.success().error().complete() 方法是从不同的successerrorcomplete 选择.ajax()方法。
ahnbizcad 2014年

Answers:


38

那么在那种特定情况下这样做是没有优势的。

的点.done() .fail() .always()的方法是,你可以

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

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

因此,您可以退还诺言,其他人可以附加自己的处理程序。

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

$.ajaxPrefilter(function(opt, origOpt, jqxhr) {
    jqxhr.always(function() {
        $("[data-plugin]").plugin();
    });
});

4
仅供参考-根据jQuery 1.5的文档completeerror及,和success设置将接受一系列回调函数,因此您可以附加多个处理程序。
2013年

1
对于#2:在调用时,除了这些方法还将在其他地方使用 $.ajax()?这些方法仅适用于jqxhr接收器吗?
ahnbizcad 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.