簡體   English   中英

$ .ajax()回調是否未綁定到其特定請求?

[英]$.ajax() callbacks are not bound to their specific request?

代碼非常復雜,因此我在下面進行了簡化,以確認我所遇到的行為是正常的還是應有的,因此我在代碼中犯了一些其他錯誤。

我有兩個單獨的ajax請求,每個請求都有自己獨特的回調。 我不在乎哪個先完成,而另一個不依賴

function ajax(url, cbS){
    $.ajax({
        url: url,
        contentType: 'application/json',
        dataType: 'json', 
        success: function(data){
            cbS(data)
        },
    });
}

function callbackSuccess1(data){
    $('#div1').html(data)
}
function callbackSuccess2(data){
    $('#div2').html(data)
}

//request#1
ajax(myapiurl+'&peram1=100', callbackSuccess1);
//request#2
ajax(myapiurl+'&peram2=200', callbackSuccess2);

問題:有時callbackSuccess1獲取用於請求#2的數據,反之亦然。

似乎哪個請求完成都會第一個觸發callbackSuccess1,第二個完成觸發callbackSuccess2。

我需要將回調綁定到它的特定請求,這樣,無論它們完成每個請求的順序如何,都將觸發正確的回調。

其他信息:我的支持是django-tastypie,在這一點上,我正在考慮好吃的東西弄亂了回應。 鑒於javascript似乎是不變的,所以這是唯一合乎邏輯的結論。

實際發生的證據是,當我檢查請求#1上的響應時,數據對象顯然是為請求#2設計的...

結論:感謝您確認“對ajax()函數的每次調用都會創建它自己的閉包”。 我以為這是錯的。 我在我的API中發現了問題。 我正在做一些時髦的事情,看來我的變量沒有及時刪除,如果第一個請求的時間比第二個請求的時間長,則會導致API返回錯誤的數據。

我所看到的包含在代碼中的唯一問題是function參數為cbS ,但是您正在調用cbs(data) -注意大小寫不同。

除此之外,您對ajax()函數的每次調用都將創建它自己的閉包,並擁有自己的參數,並且這些參數將為內部成功回調單獨保留。 這是javascript中的一項重要功能,並且可以正常工作。 只要您不使用在異步ajax調用執行期間可能更改的任何全局變量或狀態,它就不會使一個調用的參數與另一個調用的回調混淆。

您可能使用jsonp並在$ .ajax的URL中指定回調查詢參數

callback是當服務器返回響應時將要調用的javascript函數的名稱。

有關更多詳細信息,請參考jquery doc: http : //api.jquery.com/jQuery.ajax/

對於理論: http : //en.wikipedia.org/wiki/JSONP

這主要用於跨站點的ajax調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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