$ .ajax中done()方法的优点是什么,而不是success()

时间:2016-06-29 06:01:00

标签: jquery ajax

例如:

static

4 个答案:

答案 0 :(得分:2)

当有一系列多个Ajax调用并且一个等待另一个完成回调时,

done()方法很有用。因此,只有在Ajax调用A完成后,才能在done()中执行后Ajax代码。虽然success()主要是单个Ajax调用的一部分,但可以帮助您根据需要处理响应。

答案 1 :(得分:1)

success仅在AJAX调用成功时触发,即最终返回HTTP 200状态。 error如果失败则会触发,complete会在请求完成时触发,无论成功与否。

jqXHR对象的jQuery 1.8中(由$.ajax返回)success正在替换为doneerror替换为fail,始终complete

但是,您仍然可以使用当前语法初始化AJAX请求。所以这些做类似的事情:

// set success action before making the request
$.ajax({
  url: '...',
  success: function(){
    alert('AJAX successful');
  }
});

// set success action just after starting the request
var jqxhr = $.ajax( "..." )
  .done(function() { alert("success"); });

我认为此更改是为了与jQuery 1.5的新延迟对象兼容。

答案 2 :(得分:0)

您的代码格式不正确,但无论如何我都会试一试。

无论ajax请求是否成功,

done()都会触发您的函数。

success()仅在您的ajax请求成功时触发您的函数。

答案 3 :(得分:0)

成功一直是jQuery中成功回调的传统名称,定义为ajax调用中的一个选项。但是,由于$ .Deferreds和更复杂的回调的实现,完成是实现成功回调的首选方法,因为它可以在任何延期的成功示例上调用

$.ajax({
  url: '/',
  success: function(data) {}
});

完成示例

$.ajax({url: '/'}).done(function(data) {});

完成的好处是$ .ajax的返回值现在是一个延迟的promise,可以绑定到应用程序中的任何其他位置。所以,假设你想从几个不同的地方进行这个ajax调用。而不是将您的成功函数作为执行此ajax调用的函数的选项传递,您可以让函数返回$ .ajax本身并将您的回调与done,fail,then或者其他任何东西绑定。请注意,无论请求成功还是失败,始终都会运行回调。完成只会在成功时触发。