我正在使用AJAX从服务器获取一些值,而我正在异步地执行它。我怎么能停止以某种方式等待AJAX请求结束?这是我的代码:
var response = {}
for (var i = 0; i < length; i++){
$.ajax({
url : url[i],
dataType : 'json'
}).success(function(result) {
processResult(result);
})
}
我想我应该创建一个等待的函数,但它无法正常工作:
function wait() {
for (var name in response) {
if (response[name] === undefined) {
setTimeout(function() {
wait()
},50)
}
}
processResult(); //this is function where I will process my AJAX result
}
任何人都可以帮助我吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
好的,我明白了。因为ajaxComplete
是在每个单个AJAX请求之后启动的,正如我之前所说的,我必须创建将等待所有请求完成的函数。所以我这样做了:
我改变了我的功能:
var response = {}
for (var i = 0; i < length; i++){
$.ajax({
url : url[i],
dataType : 'json'
}).success(function(result) {
processResult(result);
})
}
为:
response = {}
for (var i = 0; i < length; i++){
callAJAX(url[i]);
}
_wait4ajax();
函数callAJAX是这样的:
function callAJAX(url){
$.ajax({
url : url[i],
dataType : 'json'
}).success(function(result) {
processResult(result);
})
}
和_wait4ajax
是我检查对象的所有属性是否都不是undefined
的函数,所以:
(我有应该在对象中填充的属性列表 - 此属性位于visibleLayers
数组
function _wait4ajax(){
var controlArray = [], self = this;
var length = this.visibleLayers.length;
for (var i = 0; i < length; i++) {
if (this.cachedFeatures[this.visibleLayers[i]] === undefined) {
controlArray.push('false');
} else {
controlArray.push('true');
}
}
if (controlArray.indexOf('false') != -1) {
setTimeout(function() {
self._wait4ajaxComplete();
}, 50);
} else {
//AJAX has ended - Object is ready
}
}
我用我的项目中的实际代码搞砸了我的伪代码(为此网站目的而创建),所以它可能不会以这种形式工作,但我想指定这个主题的具体想法。随意编辑这篇文章。 :)
答案 2 :(得分:0)
这个问题的答案可以满足您的需求:
How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?
您的代码:
var response = {}
for (var i = 0; i < length; i++){
$.ajax({
url : url[i],
dataType : 'json',
async: false,
success: function(result) {
processResult(result);
}
}