2012-11-27 97 views
4

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

谁能帮助我?

+0

你的意思是代码在你的ajax加载时运行吗?当你的ajax请求完成执行时,你的成功处理器中的任何东西都会被调用。你只需要在你的成功处理程序 – Alex

+0

内调用processResult()我不明白。只有当请求结束时,成功内部的函数才会被调用? –

+0

看起来像范围问题,尝试声明函数作为变量,var wait = function ... – dmi3y

回答

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

我从我的项目的实际代码搞砸了我的伪代码(这个网站的目的创建的),所以它可能不会以这种形式工作,但我想指定这个主题的具体想法。免费填写以编辑此帖子。 :)

1

由于它可能是答案,我会张贴在这里。我认为你正在寻找:

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

您可以使用此找出当你所有的AJAX已经完成,然后做响应的东西。

+0

你能给我举个例子吗?我如何使用它来等待所有ajax请求结束? – Krystian