【问题标题】:jQuery ajax() using success, error and complete vs .done(), .fail() and always()jQuery ajax() 使用成功、错误和完成与 .done()、.fail() 和 always()
【发布时间】:2023-03-23 11:50:02
【问题描述】:

问题

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

【问题讨论】:

  • 我更喜欢第二种方法...使用ajax返回的promise
  • 回调没有被弃用。 jqxhr对象上的相关方法是。
  • 我同意 Arun 的观点,我个人认为这更容易阅读
  • 我不是在寻找 cmets 和关于偏好的陈述,但想了解其中的差异(如果有的话)。
  • 对于那些不知道 jqxhr 对象是什么的人,Crazy Train 的意思是“回调没有被弃用。jqxhr 对象上的相关方法是。”是.done()替换.success().fail()替换.error().always()替换.complete().success().error().complete() 方法 不同于 .ajax()successerrorcomplete 选项方法。

标签: javascript ajax jquery


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 仅供参考 - 根据 jQuery 1.5 的 docscompleteerrorsuccess 设置将接受一组回调函数,因此您可以附加多个处理程序。跨度>
  • for #2:除了调用$.ajax() 时,这些方法还能用在哪里?这些方法是否仅适用于 jqxhr 接收器?
猜你喜欢
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
相关资源
最近更新 更多