[英]JQuery ajax success fired twice, because of .done callback
我有一些舊代碼,在場景中中止ajax請求,然后在用戶響應后重新發送該請求。
function resendLastAjaxRequest(ajaxRequest, ajaxSettings){
if(ajaxSettings != undefined){
$.ajax(ajaxSettings).done(function ( data ) {
ajaxSettings.success(data);
});
}
現在,上面的代碼為請求觸發了成功處理程序兩次,但是它已經存在了一年多了,沒人遇到。 是因為jquery版本更新。 我們目前使用的是2.0.3,我不知道何時確切地更新了jquery,但可能是在較早的版本中done
了而不是success
。 進行了一些挖掘,但找不到任何原因使它工作了這么長時間,請提供幫助。
更新
它包含一條評論說
好的,它是jQuery 1.8 :)由於$ .ajax從jQuery 1.5返回了promise,這是一個簡單的替換,以解決一致性問題(使用deferred接口):done()代替了success(),fail()表示錯誤()和always()代表complete()
這意味着如果調用done
,那么我們必須顯式觸發success
。 這可能是它工作了這么長時間的原因。 但是現在,在完成觸發之前,已經調用success
處理程序,然后done
回調再次調用success
處理程序。
關於如何更改/修改代碼的任何建議,以使success
僅被調用一次?
編輯
ajaxSettings看起來像這樣:
accepts: Object
async: true
cache: false
complete: function (request, status)
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
contents: Object
converters: Object
crossDomain: false
dataTypes: Array[1]
error: function (request, status){flatOptions: Object global: true hasContent: false isLocal: false jsonp: "callback"
jsonpCallback: function (){var e=hn.pop()||x.expando+"_"+Yt++;return this[e]=!0,e}loadingdisplay: trueprocessData: true
responseFields: Object
success: function (htmlData) {type: "GET"
就像我在評論中說的那樣,我認為以前您的jQuery版本低於1.5 (未實現.done()
),因此成功方法作為回調調用,然后.done()
在控制台中引發錯誤而不會破壞任何內容(就像undefined is not a function
)。 因此,在這種情況下,控制台中將發生錯誤,並且僅調用了一個回調函數。
jQuery 1.4.4演示: jsfiddle
在控制台中:
1錯誤 :
undefined is not a function
(由於.done()
)
和
1個日志 :
Object
(來自調用的數據)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.