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