谁能帮我?
我无法理解 和 之间success
的.done()
区别$.ajax
。
如果可能,请举例说明。
success
仅在 AJAX 调用成功时触发,即最终返回 HTTP 200 状态。error
如果失败以及complete
请求完成时触发,无论成功与否。
在 jQuery 1.8 中,jqXHR
对象(由 返回$.ajax
)success
被替换为done
、error
withfail
和complete
with 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