$ .ajax的成功和.done()方法有什么区别?
任何人都可以帮我吗?
我无法理解success
与$.ajax
.done()
之间的区别。
如果可能的话,请举例。
简而言之,从ajax函数解耦成功callback函数,以便您可以添加自己的处理程序,而无需修改原始代码(观察者模式)。
请从这里find更多的详细信息: https : //stackoverflow.com/a/14754681/1049184
success
只会触发如果AJAX调用成功,即最终返回HTTP 200状态。 error
会在失败时触发,并在请求结束时完成,无论成功与否。
在jqXHR
对象(由$.ajax
返回)上的jQuery 1.8中, success
被replace为done
, error
与fail
并always
complete
。
不过,您仍应该能够使用旧的语法来初始化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的延迟对象兼容。 推迟(现在Promise
,Chrome和FX中具有完整的原生浏览器支持)允许您链接asynchronous操作:
$.ajax("parent"). done(function(p) { return $.ajax("child/" + p.id); }). done(someOtherDeferredFunction). done(function(c) { alert("success: " + c.name); });
这个函数链比你success
获得的嵌套金字塔更容易维护。
不过,请注意, done
现在已被弃用,转而使用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
扩展承诺提高了语法(和error handling):
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()
只有在你的web服务器响应200 OK HTTP头时才会被调用 – 基本上当一切正常的时候。
附加到done()的callback将在parsing延迟时触发。 附加到失败()的callback将在延迟被拒绝时触发。
promise.done(doneCallback).fail(failCallback) .done() has only one callback and it is the success callback
success
是请求成功时调用的callback,并且是$.ajax
调用的一部分。 done
实际上是由$.ajax()
返回的jqXHR
对象的一部分,并replace了jQuery 1.8中的success
。