簡體   English   中英

由於.done回調,JQuery ajax成功觸發了兩次

[英]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 進行了一些挖掘,但找不到任何原因使它工作了這么長時間,請提供幫助。

更新

成功和$ .ajax的.done()方法有什么區別

它包含一條評論說

好的,它是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM