2013-07-11 78 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的所有可能值旋轉,而我將其設置爲未定義的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); 
}