success 仅在 AJAX 调用成功时触发,即最终返回 HTTP 200 状态。 error 在失败时触发,complete 在请求完成时触发,无论成功与否。
在 jQuery 1.8 中,jqXHR 对象(由 $.ajax 返回)上的 success 被替换为 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 兼容。 Deferred(现在是 Promise,在 Chrome 和 FX 中具有完整的原生浏览器支持)允许您链接异步操作:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
与使用success 获得的嵌套回调金字塔相比,此函数链更易于维护。
但是,请注意 done 现在已弃用,取而代之的是使用 then 的 Promise 语法:
$.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);
}