ajax请求then和done的区别,成功和$ .ajax的.done()方法之间有什么区别

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

在jQuery中1.8 jqXHR对象success(由$.ajax返回)上替换为done,error与fail和complete与always。

但是你应该仍然可以用旧的语法初始化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的deferred object兼容性。递延(现在Promise,其在Chrome和FX全原生浏览器支持)允许您链的异步操作:

$.ajax("parent").

done(function(p) { return $.ajax("child/" + p.id); }).

done(someOtherDeferredFunction).

done(function(c) { alert("success: " + c.name); });

此功能链更容易维护比你success得到回调的嵌套金字塔。

但是,请注意,done现在赞成Promise语法不赞成使用then代替:

$.ajax("parent").

then(function(p) { return $.ajax("child/" + p.id); }).

then(someOtherDeferredFunction).

then(function(c) { alert("success: " + c.name); }).

catch(function(err) { alert("error: " + err.message); });

这是值得采用,因为async和await延长承诺改善语法(和错误处理):

try {

var p = await $.ajax("parent");

var x = await $.ajax("child/" + p.id);

var c = await someOtherDeferredFunction(x);

alert("success: " + c.name);

}

catch(err) {

alert("error: " + err.message);

}

你可能感兴趣的:(ajax请求then和done的区别,成功和$ .ajax的.done()方法之间有什么区别)