首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >success和$.ajax的.done()方法有什么区别

success和$.ajax的.done()方法有什么区别
EN

Stack Overflow用户
提问于 2012-01-13 16:36:19
回答 4查看 109.3K关注 0票数 105

有谁可以帮我?

我不能理解success$.ajax.done()之间的区别。

如果可能,请举例说明。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-13 16:41:33

简而言之,将成功的回调函数与ajax函数解耦,这样以后您就可以添加自己的处理程序,而无需修改原始代码(观察者模式)。

请从此处找到更多详细信息:https://stackoverflow.com/a/14754681/1049184

票数 6
EN

Stack Overflow用户

发布于 2012-01-13 16:38:44

只有当AJAX调用成功时,success才会触发,即最终返回HTTP200状态。如果失败则触发error,当请求完成时触发complete,无论成功与否。

在jQuery 1.8中,jqXHR对象(由$.ajax返回)上的success被替换为doneerror被替换为failcomplete被替换为always

但是,您仍然可以使用旧语法初始化AJAX请求。所以它们做的是相似的事情:

代码语言:javascript
运行
复制
// 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中完全支持原生浏览器)允许你链接异步操作:

代码语言:javascript
运行
复制
$.ajax("parent").
    done(function(p) { return $.ajax("child/" + p.id); }).
    done(someOtherDeferredFunction).
    done(function(c) { alert("success: " + c.name); });

与使用success获得的嵌套回调金字塔相比,这个函数链更易于维护。

但是,请注意,done现在已弃用,取而代之的是使用thenPromise语法:

代码语言:javascript
运行
复制
$.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); });

这是值得采用的,因为asyncawait extend承诺改进语法(和错误处理):

代码语言:javascript
运行
复制
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); 
}
票数 114
EN

Stack Overflow用户

发布于 2012-01-13 16:45:16

只有当你的when服务器响应200OK HTTP报头时,才会调用.success() --基本上是在一切正常的情况下。

附加到done()的回调将在延迟解析时触发。当延迟被拒绝时,附加到fail()的回调将被触发。

代码语言:javascript
运行
复制
promise.done(doneCallback).fail(failCallback)

.done() has only one callback and it is the success callback
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8847829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档