使用地理编码为地址动态获取LatLng时,我遇到了一个奇怪的问题。我已经声明了一个全局数组来存储地址的latLng值。在我控制台记录该数组的值后,将数据存储到该数组后,它会完美地显示这些值。但是,当我控制台记录该数组长度的值时,它显示0.对我来说,一切似乎都有些奇怪。无法理解我的代码中的确切问题。
以下是用于获取所有位置的HTML代码。
<div id="locations" class="col-sm-4">
<fieldset>
<legend class="section">Redemption Locations (<?php echo count($locations); ?>)</legend>
<div id="stats_div" style="overflow-y: scroll; height: 335px;">
<?php foreach($locations as $location): ?>
<div class="stats" data-id="<?php echo $location->address; ?>">
<span class="stat">
<strong><?= $location->label ? $location->label : $location->name; ?></strong>
<br>
<?php echo $location->address; ?>
<br>
<?php echo $location->phone_number; ?>
</span>
</div>
<?php endforeach; ?>
</div>
</fieldset>
</div>
这些地点看起来像加拿大安大略省滑铁卢里根纳街25号,#34;
这是用于显示带有位置标记的地图的JS代码。
var geocoder;
var map;
var addresses = [];
/*var locations = [
[43.4643342, -80.52126329999999],
[43.6331368, -79.42370740000001]
];*/
var locations = [];
function getAddress() {
var count = $("#locations").find(".stats").length;
for (var i=0; i<count; i++)
addresses.push($("#locations .stats:eq('"+i+"')").attr('data-id'));
}
function storeLatLng(lat, lng) {
var newarr = [];
newarr.push(lat, lng);
locations.push(newarr);
console.log('Array Length: '+locations.length);
}
function getLatLong() {
getAddress();
var i;
geocoder = new google.maps.Geocoder();
for (i in addresses) {
var address = addresses[i];
geocoder.geocode({'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
storeLatLng(lat, lng);
}
});
}
}
function initializeMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: {lat: 53, lng: -92.220885},
scrollwheel: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var
bounds = new google.maps.LatLngBounds(),
marker = '';
getLatLong();
console.log(locations);
console.log(locations.length);
for (var i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: {lat: locations[i][0], lng: locations[i][1]},
map: map
});
bounds.extend(marker.position);
}
map.fitBounds(bounds);
}
$(document).ready(function(){
initializeMap();
});
要检查locations数组的值,只需在循环之前和循环中放置一个控制台日志。位置数组的输出是完美的但是数组长度的输出是0.我不能理解它为什么显示0,因为数组的所有值对我来说都是完美的。当我将静态值放在该数组上时(在代码中注释掉)。它完美地显示了数组值和数组长度。
所以,我的问题是关于名为locations
的全局数组。如果你们仔细检查,我已经在我的代码中放了三次控制台日志。一个在storeLatLng()
,另外两个在initializeMap()
。在storeLatLng()
函数中,它可以完美地打印出值。在initializeMap()
中,First控制台lg打印locations
数组的值。看起来很完美。但是在那一行之后,当我控制台记录该数组的长度时,它显示0.或更好的理解,我附上控制台日志截图。