Как сделать несколько звонков из ленты, используя getJSON - PullRequest
0 голосов
/ 17 августа 2011

Я пытаюсь сделать цикл, чтобы получить информацию о погодных условиях из разных городов и показать их на карте Google в качестве маркеров.Если я сделаю это, я могу получить по одному:

$.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 Ответ

1 голос
/ 17 августа 2011

Ваша проблема в том, что вы назначаете свои маркеры [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 через замыкание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...