$ .ajax的成功和.done()方法有什么区别

时间:2012-01-13 08:36:19

标签: jquery jquery-deferred

任何人都可以帮助我吗? 我无法理解success的{​​{1}}和.done()之间的区别。

如果可能请举例。

4 个答案:

答案 0 :(得分:99)

success仅在AJAX调用成功时触发,即最终返回HTTP 200状态。 error如果失败则会触发,complete会在请求完成时触发,无论成功与否。

jqXHR对象的jQuery 1.8中(由$.ajax返回)success已替换为doneerror替换为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