有谁可以帮我?
我不能理解success
和$.ajax
的.done()
之间的区别。
如果可能,请举例说明。
发布于 2012-01-13 16:41:33
简而言之,将成功的回调函数与ajax函数解耦,这样以后您就可以添加自己的处理程序,而无需修改原始代码(观察者模式)。
请从此处找到更多详细信息:https://stackoverflow.com/a/14754681/1049184
发布于 2012-01-13 16:38:44
只有当AJAX调用成功时,success
才会触发,即最终返回HTTP200状态。如果失败则触发error
,当请求完成时触发complete
,无论成功与否。
在jQuery 1.8中,jqXHR
对象(由$.ajax
返回)上的success
被替换为done
,error
被替换为fail
,complete
被替换为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
现在已弃用,取而代之的是使用then
的Promise
语法:
$.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
extend承诺改进语法(和错误处理):
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);
}
发布于 2012-01-13 16:45:16
只有当你的when服务器响应200OK HTTP报头时,才会调用.success()
--基本上是在一切正常的情况下。
附加到done()的回调将在延迟解析时触发。当延迟被拒绝时,附加到fail()的回调将被触发。
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
https://stackoverflow.com/questions/8847829
复制相似问题