2017-08-10 204 views
0

我的程序的结构如下:如何从for循环中的ajax请求中获取数据?

var output = []; //<---- where I want to store the data 

function getData(){ 
    for(...){ 
     $.getJSON("...", function(data){ 
      if(...){ 
       output.push(data[...]); 
      }else{ 
       $.getJSON("...", function(data2){ 
        output.push(data2[...]); 
       }); 
      } 
     }); 
    } 
} 

这不工作,我的理解是Ajax调用的异步性质所致。调用函数后我无法访问数据。做输出[0]返回未定义。

+0

如果你可以链接你的完整代码+你的数据是什么样的。为什么它嵌套在“for循环”中?这通常不是一个好习惯。 –

+0

在这种情况下,如果您确实需要在循环中执行调用,则必须使用承诺。 – Legends

+0

“执行输出[0]返回未定义。”它会在'getJSON'函数返回之前,是的。您需要访问回调中的数据,或者从回调中返回一个承诺,并在尝试访问数据之前等待它解析。 –

回答

1

您可以发起同步循环中的请求,但您必须异步收听的响应。 jQuery的getJSON方法返回一个与Promise兼容的jqXHR对象。所以,你可以使用Promise.all像这样:

function getData() { 
    var requests = []; 

    for (...) { 
    const request = $.getJSON(...); 
    requests.push(request); 
    } 

    return Promise.all(requests); 
} 

getData().then(function (results) { 
    // results is an array with responses of your requests (ordered by push order) 
});