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
        }
    }
}
4

2 に答える 2

2

あなたはただすることができます

var titles = <?php echo json_encode($titles); ?>;
于 2013-07-11T03:21:32.740 に答える
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);
}
于 2013-07-11T07:36:59.683 に答える