【问题标题】:How can I get data outside the loop when using loop with $.get使用带有 $.get 的循环时,如何在循环外获取数据
【发布时间】:2014-10-02 03:59:23
【问题描述】:

我是 Javascript 的新手。我的脚本出现了一些问题 我不得不循环访问 $.get,我陷入了循环,这是我的代码

a = ["{"sid":"13485"}","{"sid":"25114"}","{"sid":"45145"}"]

    for (var i = 0; i < a.length; i+=1){
       .$get('url' + "?params=" + a[i],function(data2){             
           school = data2['data']; 
        });
    }

    console.log(school);

当我尝试 console.log(school) 时,它一直显示“object{}”

如何在循环外获取数据?

如果您能帮我解决这个问题,我将不胜感激。

谢谢。

【问题讨论】:

  • 欢迎来到 async 的精彩世界!你不能那样做。

标签: javascript loops getjson


【解决方案1】:

你必须使用回调函数或类似的东西。

因为 $.get 是异步函数,而当

console.log(school);

执行(!)学校尚未评估。

你可以使用一些这样的东西。

    a = ["{"sid":"13485"}","{"sid":"25114"}","{"sid":"45145"}"]

    for (var i = 0; i < a.length; i+=1){
       .$get('url' + "?params=" + a[i],function(data2){             
           school = data2['data']; 
           console.log(school);
        });
    }

a = ["{"sid":"13485"}","{"sid":"25114"}","{"sid":"45145"}"]
var  school ={};
for (var i = 0; i < a.length; i+=1){
   .$get('url' + "?params=" + a[i],function(data2){             
       school = data2['data']; 
       whenitready();
    });
}

function whenitready(){
   console.log(school);
}

【讨论】:

    【解决方案2】:

    如果您需要等到所有请求都完成,您需要这样的东西:

    var endpoints = [];
    for (var i = 0; i < a.length; i+=1) {
      endpoints.push($.get('url' + '?params=' + a[i]));
    }
    $.when.apply($, endpoints).done(function () {
      // Function arguments array differs if we have one or more than one endpoint.
      // When called with one endpoint arguments is an array of three elements [data, textStatus, jqXHR].
      // When called with more than one endpoint arguments is an array of arrays [[data, textStatus, jqXHR], ...].
      // Normalize the single endpoint to the generic list one.
      var args = endpoints.length > 1 ? arguments : [arguments];
      for (var i = 0; i < args.length; i++) {
        var data = args[i][0];
        // Do stuff here with every data received...
        school = ... 
      }
    
      console.log(school);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2016-09-08
      • 1970-01-01
      • 2015-12-26
      • 2014-06-20
      • 2013-12-03
      • 2019-01-26
      相关资源
      最近更新 更多