2012-02-23 4 views
0

У меня есть массив местоположений и, используя геокодер, я смог получить широту & долготу. Однако я хочу каждый раз передавать значение местоположения из функции геокодирования.Не получить правильное возвращаемое значение от геокодера?

var locations=new Array("Delhi","Jaipur") 
for(var i=0;i<locations.length;i++){ 
var tempLoc=locations[i];   
geocoder.geocode({ 'address': tempLoc},function(results, status) 
{ 
     if (status == google.maps.GeocoderStatus.OK) { 

       latitude[i] = results[0].geometry.location.lat(); 
       longitude[i] = results[0].geometry.location.lng();   
    latLonArray[i]=new google.maps.LatLng(latitude[i],longitude[i]); 
    latlngbounds.extend(latLonArray[ i ]); 
    map.setCenter(latlngbounds.getCenter()); 
       map.fitBounds(latlngbounds);      
       createMarker(latLonArray[i],tempLoc); 
     }    
}); 

} 

function createMarker(pos,t){ 
var marker = new google.maps.Marker({  
    position: pos, 
    map: map, 
    title: t  
}); 
google.maps.event.addListener(marker, 'click', function() { 
infowindow.setContent(marker.title); 
infowindow.open(map, marker); 

}); 
return marker; 
} 

Местоположения маркировка отлично, но когда событие щелчка называется информационное окно не отображается в зависимости от местоположения (для каждых маркеров информационного окно показывает название как последнее место [ «Джайпур»]).

ответ

0

Причина в том, что ответ от геокодера является асинхронным. Цикл for проходит через каждый элемент, и так как «Джайпур» последнее значение, тот это значение по-прежнему сохраняется в tempLoc, когда ответ от геокодера наконец приходит и называют createMarker:

createMarker(latLonArray[i],tempLoc); 
// by this time tempLoc always equals tempLoc=locations[locations.length-1]; 

То, что вы на самом деле хотите сделать, это получить имя обратно, что геокодер вернулся

results[0].address_components[0].long_name 

Таким образом, ваш призыв к createMarker будет выглядеть следующим образом:

createMarker(latLonArray[i], results[0].address_components[0].long_name); 
Смежные вопросы