如何使用getJSON从Feed进行多次调用

时间:2011-08-17 19:28:52

标签: javascript jquery json google-maps

我正在尝试制作一个循环来获取来自不同城市的天气状况,并将其作为标记显示在googlemap中。 如果我这样做,我可以一次得到一个:

$.getJSON("http://free.worldweatheronline.com/feed/weather.ashx?q="+markers[0].lat+","+markers[0].lng+"&format=json" +"&num_of_days=1" + "&key=e678d973c7184412112807"+"&callback=?",function(jsonp){
        $.each(jsonp.data.current_condition, function(i){
            var time = this;
            markerWeather[0] = new google.maps.Marker({
                position: new google.maps.LatLng(markers[0].lat,markers[0].lng),
                title: "Temp. " + markers[0].title + ": "+ time.temp_C + " grados",
                map: mapa
            });      
        });
    });

如果我复制所有内容并更改它与所有标记一起使用的数字......问题是,如果我交换数字并将变量放入循环中,它就不能正常工作..例如:

for(z=0; z<=5; z++){  
$.getJSON("http://free.worldweatheronline.com/feed/weather.ashx?q="+markers[z].lat+","+markers[z].lng+"&format=json" +"&num_of_days=1" + "&key=e678d973c7184412112807"+"&callback=?",function(jsonp){
                $.each(jsonp.data.current_condition, function(i){
                    var time = this;
                    markerWeather[0] = new google.maps.Marker({
                        position: new google.maps.LatLng(markers[z].lat,markers[z].lng),
                        title: "Temp. " + markers[z].title + ": "+ time.temp_C + " grados",
                        map: mapa
                    });      
                });
            });
}

请帮忙!对不起,感到抱歉。

PS:这是我的页面:www.kanawogirusa.com.ar PS2:这是代码map.js

1 个答案:

答案 0 :(得分:1)

您的问题是您将标记[z]分配给markerWeather [0] ..所以所有内容都分配给[0]

至少那是我现在能看到的最明显的事情..

<强>更新

好吧我猜我发现了问题。由于.getJson是一个异步调用,该方法已经返回,并且当第一个异步调用返回执行回调时,你的for()循环已经将变量修改了6次。

你需要做的是:

var f = function(z) {
        $.getJSON("http://free.worldweatheronline.com/feed/weather.ashx?q="+markers[z].lat+","+markers[z].lng+"&format=json" +"&num_of_days=1" + "&key=e678d973c7184412112807"+"&callback=?",function(jsonp){
                        $.each(jsonp.data.current_condition, function(i){
                            var time = this;
                            markerWeather[z] = new google.maps.Marker({
                                position: new google.maps.LatLng(markers[z].lat,markers[z].lng),
                                title: "Temp. " + markers[z].title + ": "+ time.temp_C + " grados",
                                map: mapa
                            });      
                        });
                    });
    }

for(z=0; z<=5; z++){  
    f(z);
}

通过在每次循环迭代中调用一个函数,您可以通过闭包保留z变量..