等待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 }
谁能帮我?
好的,我明白了。 因为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); } }