[英]$.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.