等待ajax响应来填充对象

我正在使用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 } 

谁能帮我?

因为它可能是答案,我会在这里发布。 我想你正在寻找:

http://api.jquery.com/ajaxComplete/

您可以使用它来查明所有ajax何时完成,然后对响应执行某些操作。

好的,我明白了。 因为ajaxComplete是在每个 AJAX请求之后启动的,正如我之前所说,我必须创建将等待所有请求完成的函数。 所以我这样做了:

我改变了我的function:

 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 } } 

我用我的项目中的实际代码搞砸了我的伪代码(为此网站目的而创建),所以它可能不适用于这种forms,但我想指定这个主题的具体想法。 随意编辑这篇文章。 🙂

这个问题的答案将满足您的需求:

如何让jQuery执行同步而非异步的Ajax请求?

你的代码:

 var response = {} for (var i = 0; i < length; i++){ $.ajax({ url : url[i], dataType : 'json', async: false, success: function(result) { processResult(result); } }