任何人都可以帮助我吗?
我无法理解success
的{{1}}和.done()
之间的区别。
如果可能请举例。
答案 0 :(得分:99)
success
仅在AJAX调用成功时触发,即最终返回HTTP 200状态。 error
如果失败则会触发,complete
会在请求完成时触发,无论成功与否。
在jqXHR
对象的jQuery 1.8中(由$.ajax
返回)success
已替换为done
,error
替换为fail
和{ {1}} complete
。
但是,您仍然可以使用旧语法初始化AJAX请求。所以这些做类似的事情:
always
此更改是为了与jQuery 1.5的deferred object兼容。延迟(现在// 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"); });
,在Chrome和FX中具有完全本机浏览器支持)允许您链接异步操作:
Promise
这个函数链比使用$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
得到的嵌套回调金字塔更容易维护。
但是,请注意,现在不推荐使用success
,而是赞成使用done
的{{1}}语法:
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); });
扩展了promises改进的语法(和错误处理):
async
答案 1 :(得分:10)
简而言之,将成功回调函数与ajax函数解耦,以便以后可以添加自己的处理程序而无需修改原始代码(观察者模式)。
请从此处查找更多详细信息:https://stackoverflow.com/a/14754681/1049184
答案 2 :(得分:5)
.success()
只有在您的网络服务器以200 OK HTTP标头响应时才会被调用 - 基本上当一切都很好时。
解决延迟时,将触发附加到done()的回调。当延迟被拒绝时,将触发附加到fail()的回调。
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
答案 3 :(得分:0)
success
是请求成功并且是$.ajax
调用的一部分时调用的回调。 done
实际上是jqXHR
返回的$.ajax()
对象的一部分,并替换了jQuery 1.8中的success
。