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

Pos*_*ing 71 javascript ajax jquery

问题:

  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(); }
    });
Run Code Online (Sandbox Code Playgroud)

在快速浏览一些文档的同时,我遇到了一个引用声明,从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"); });
Run Code Online (Sandbox Code Playgroud)

Esa*_*ija 35

那么在那种特殊情况下没有优势.

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

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

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

因此,您可以返回承诺,其他人可以附加自己的处理程序.

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

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

  • 仅供参考 - 根据[docs](http://api.jquery.com/jQuery.ajax/),从jQuery 1.5开始,`complete`,`error`和`success`设置将接受一系列回调函数,所以你可以附加多个处理程序. (3认同)