因此情況如下:jQuery:暫停或延遲功能
我有一個遞歸的,異步的AJAX調用,它正在從服務器拉數據。這個遞歸調用在用戶登錄時只發生一次。 我有另一個需要AJAX調用才能導航的頁面(基本上是一個延遲加載的樹)。當第一個AJAX調用正在發生時,這些其他調用需要一段時間才能完成,並且由於第一個調用可能發出多達2000個請求,所以此延遲有時會相當長。
基本上我想實現的是在進行其他調用時「暫停」遞歸調用。僞代碼:
function recursiveAjax(){
$.ajax({
async : true,
url : 'someurl',
dataType : 'json',
beforeSend : function(xhr) {
// do stuff
},
error : function(xhr, ajaxOptions, thrownError) {
// handle errors
},
success : function(data) {
//conditions
recursiveAjax();
}
});
}
function navigationAjax(){
$.ajax({
async : true,
url : 'someurl',
dataType : 'json',
beforeSend : function(xhr) {
// pause recursiveAjax();
},
error : function(xhr, ajaxOptions, thrownError) {
// handle errors
},
success : function(data) {
//conditions
// resume recursiveAjax();
}
});
}
這非常瘋狂。嘗試在超時塊中包裝遞歸調用,例如成功:setTimeout(function(){recursiveAjax();},500); - 這應該爲其他呼叫留出空間,並且不那麼瘋狂。 – Mahn 2012-07-05 13:26:01
看看[jQuery deferreds](http://api.jquery.com/category/deferred-object/) – elclanrs 2012-07-05 13:27:13