循环中的API请求有问题

时间:2015-05-29 11:08:32

标签: javascript wunderground

我遇到了大麻烦,我无法理解为什么这个东西不起作用。我需要为数组的每个值发出一个API请求,如果我查看我的控制台javascript,请求会被提供但是我需要请求中的纬度和经度值。问题是在API请求之外我有4个值(对于数组的每个元素2个lat和long),并且在API请求中我只找到最后两个lat和long,为什么?这似乎没有意义,我不知道问题出在哪里。这就是代码

var luoghi = {"city":[
                    { "lat":"45.46" , "lng":"9.19" , "name":"Milano" },
                    { "lat":"41.12" , "lng":"16.86" , "name":"Bari" }
            ]}; 
var arr=[];
for(var i in luoghi.city){  
lat = luoghi.city[i].lat;
lng= luoghi.city[i].lng;

console.log("Before API request "+lat+" "+lng);//here i have the right 4 values

var wUnderAPI = "http://api.wunderground.com/api/"+API_WU+"/forecast/q/"+lat+","+lng+".json?callback=?";
$.getJSON( wUnderAPI, {format: "json"}).done(function( data ) {
    if(typeof data['forecast']['simpleforecast']['forecastday'] != 'undefined'){  // controllo esito richiesta json
            console.log(" Inside the request "+lat+" "+lng); //here just the bari lat & lng 
    }
});
}

API_WU是我的私有API KEY,但由于它不是商业用途,任何人都可以从网站上获取一个。希望我的问题很明确,因为这是一个很难解释的问题:)提前感谢

1 个答案:

答案 0 :(得分:0)

您的done函数引用之前定义的lat,lng,因为它是异步的,例如它可能需要一些时间才能返回并且不会阻止循环中继续执行的脚本,它总是会为您提供最后定义的值,因为它很可能仅在处理完所有其他值后返回。您需要将正确的数据提供给done函数中的回调。

尝试将latlng作为参数传递给done

$.getJSON( wUnderAPI, {format: "json"}).done(function( data, lat, lng ) {
    if(typeof data['forecast']['simpleforecast']['forecastday'] != 'undefined'){  // controllo esito richiesta json
            console.log(" Inside the request "+lat+" "+lng); //here just the bari lat & lng 
    }
});