任何人都可以帮助我吗?
我无法理解$.ajax
的success
和.done()
之间的差异。
如果可能请举例。
任何人都可以帮助我吗?
我无法理解$.ajax
的success
和.done()
之间的差异。
如果可能请举例。
简而言之,从ajax函数中解耦成功回调函数,以便稍后您可以添加自己的处理程序而无需修改原始代码(观察者模式)。
请从这里找到更详细的信息:https://stackoverflow.com/a/14754681/1049184
而在它下面的例子中,映射出done => success,fail => error的等价性,并且总是=>完成 – StuartLC 2012-01-13 08:43:13
这个答案忽略了这一点。 'success:'用作参数,'.success()'作为'jqXHR'上的方法是有区别的。后者正在被弃用,但前者是OP所问的。 – Alnitak 2012-08-23 08:39:29
成功/错误/完成不推荐使用,并基于AJAX状态更改;完成/失败/总是基于jQuery延迟状态更改。请参阅http://api.jquery.com/category/deferred-object/。 – mickeyreiss 2012-12-29 02:22:45
success
仅在AJAX调用成功时触发,即最终返回HTTP 200状态。 error
如果失败则触发,complete
当请求结束时触发,无论成功与否。
在jQuery中1.8 jqXHR
对象success
(由$.ajax
返回)上替换为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兼容性。递延(现在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);
}
success
是当请求成功,是$.ajax
呼叫的一部分被调用的回调。 done
实际上是由$.ajax()
返回的jqXHR
对象的一部分,并且替换了jQuery 1.8中的success
。
.success()
只有当您的网络服务器响应200 OK HTTP标头时才会被调用 - 基本上当一切正常时。
当解析延迟时,附加到done()的回调将被触发。附加到失败()的回调将在延迟被拒绝时触发。
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
值得注意的是,当格式错误的JSON以200/OK状态码发回时,.success()不会被调用。具体来说,我遇到了一个问题,生成NaN值的Web服务器后端代码并将它们序列化为JavaScript NaN(即作为符号,而不是字符串'NaN'),这实际上是无效的JSON - 所以将响应解析为JSON失败并且.fail()被执行,但是响应状态是200.但是,成功只用OK状态代码来调用仍然是事实;只是想指出,只是因为没关系,并不意味着它是'成功';) – Kasapo 2015-12-23 22:05:48
您在哪里阅读了关于$ .ajax()的done()方法? AFAIK done方法与$ .Deferred对象有关。也许你在谈论.complete()而不是? http://api.jquery.com/jQuery上的 – fcalderan 2012-01-13 08:37:54
。ajax/page – 2012-01-13 08:39:36
好吧,它是jQuery 1.8 :)由于$ .ajax从jQuery 1.5返回一个承诺,这是一个简单的替换问题的一致性问题(使用延迟接口):done()取代success(),失败()for error()和always()for complete() – fcalderan 2012-01-13 08:42:12