$ .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为doneerrorfailalways 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); }); 

这是值得采用的,因为asyncawait扩展承诺提高了语法(和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