任何人都可以幫助我嗎?
我無法理解$.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