因此情况如下: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