2013-07-11 3 views
0

У меня есть массив за пределами геокодера, но когда я хочу использовать этот массив внутри геокодера значение массива не определеныНевозможно получить доступ к массиву внутри геокодера

var titles = new Array(<?php echo implode(",",$titles); ?>); 
var length = postCode.length; 

for (var i = 0; i < length; i++) 
{ 
    geocoder.geocode({'address': postCode[i]}, function(results, status) 
    { 
     if (status == google.maps.GeocoderStatus.OK) 
     { 
      lat2 = results[0].geometry.location.lat(); 
      lng2 = results[0].geometry.location.lng(); 
      var Latlng = new google.maps.LatLng(lat2, lng2); 

      var marker = new google.maps.Marker({ 
           position: Latlng, 
           map: map, 
           title: titles[i], 
           icon: icon}); 
      // alert(titles[i]) - all undefined 
     } 
    } 
} 
+0

убедитесь, что массив не имеет 'var' перед его декларация. в JavaScript 'var ab' означает, что' ab' является локальной переменной области. – Fallen

+0

Покажите нам ** сгенерированный ** JavaScript. –

ответ

2

Вы можете просто сделать

var titles = <?php echo json_encode($titles); ?>; 
1

Геокодер является асинхронным. Цикл вращается через все возможные значения i, оставляя i установленным для postCode.length + 1, который не определен. Это может быть устранено с закрытием функции (однако, в зависимости от количества мест, у вас есть, у вас могут возникнуть проблемы с лимитом квоты или лимита):

function geocodeAddress(index) { 
    geocoder.geocode({'address': postCode[index]}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
     var lat2 = results[0].geometry.location.lat(); 
     var lng2 = results[0].geometry.location.lng(); 
     var Latlng = new google.maps.LatLng(lat2, lng2); 
     var marker = new google.maps.Marker({ 
          position: Latlng, 
          map: map, 
          title: titles[index], 
          icon: icon 
         }); 
    } else { alert("geocode failed:"+status); 
    }); 
} 

for(var i = 0; i < length; i++) 
{ 
    geocodeAddress(i); 
} 
Смежные вопросы