谁能帮我?
我无法理解 和 之间success的.done()区别$.ajax。
如果可能,请举例说明。
success仅在 AJAX 调用成功时触发,即最终返回 HTTP 200 状态。error如果失败以及complete请求完成时触发,无论成功与否。
在 jQuery 1.8 中,jqXHR对象(由 返回$.ajax)success被替换为done、errorwithfail和completewith 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现在不推荐使用该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 函数解耦,这样以后您就可以在不修改原始代码的情况下添加自己的处理程序(观察者模式)。
请从此处找到更多详细信息:https ://stackoverflow.com/a/14754681/1049184
.success()只有当您的网络服务器以 200 OK HTTP 标头响应时才会调用 - 基本上是在一切正常的情况下。
当 deferred 被解决时,附加到 done() 的回调将被触发。当 deferred 被拒绝时,附加到 fail() 的回调将被触发。
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
success是请求成功时调用的回调,是调用的一部分$.ajax。done实际上是由 ,jqXHR返回的对象的一部分,并在 jQuery 1.8 中$.ajax()替换。success