我正在处理Google Maps API脚本,但无法使用我的阵列。下面的屏幕截图显示了下面代码中的console.log语句。有两个数组,它们看起来就像我想要的那样。然后我调试console.log以验证长度(在这种情况下为6)。然后我开始一个从0到5(6减1)的循环。但是验证第一个console.log而不是(markers [i] [0])返回TypeError:x [r]是未定义的。我很困惑,为什么我可以清楚地看到我正在尝试提取值的上方数组。
if ($('#propertymap').length){
var map=new google.maps.Map(document.getElementById('propertymap'), {
center: {lat: 37.09024, lng: -95.712891},
zoom: 5
});
var bounds=new google.maps.LatLngBounds();
var geocoder=new google.maps.Geocoder();
var id;
var location;
var street;
var city;
var state;
var zip;
var squarefootage;
var ownedacreage;
var leasedacreage;
var hotelrooms;
var website;
var markers=[];
var infocontent=[];
$.post('/_getproperties.php', {task:'getproperties'}, function(result){
var locationsSplit=result.replace('{', '').split('}');
var i;
for (i=0; i<locationsSplit.length-1; i++){
var currentFields=locationsSplit[i].split('|');
id=currentFields[0];
location=currentFields[1];
street=currentFields[2];
city=currentFields[3];
state=currentFields[4];
zip=currentFields[5];
squarefootage=currentFields[6];
ownedacreage=currentFields[7];
leasedacreage=currentFields[8];
hotelrooms=currentFields[9];
website=currentFields[10];
geocodeAddress(location, street + ', ' + city + ', ' + state + ' ' + zip, location + '<br />' + street + '<br />' + city + ', ' + state + ' ' + zip, i);
}
console.log(markers);
console.log(infocontent);
console.log(locationsSplit.length-1);
for (i=0; i<locationsSplit.length-1; i++){
console.log(i);
console.log(markers[i][0]);
}
});
function geocodeAddress(locationtitle, locationaddress, locationdescription, i){
geocoder.geocode({'address': locationaddress}, function(results, status){
if (status==='OK'){
markers[i]=[];
markers[i][0]=locationtitle;
markers[i][1]=results[0].geometry.location.lat();
markers[i][2]=results[0].geometry.location.lng();
infocontent[i]=[];
infocontent[i][0]=locationdescription;
} else {
console.log('Geocode was not successful for the following reason: ' + status);
}
});
}
}
答案 0 :(得分:2)
geocoder.geocode
似乎是异步操作。在程序经历for循环的第一次迭代时,标记和infoContent数组尚未填充。
您在控制台中看到结果为填充数组的原因是因为这些项是对象,并且在设置扩展它们时,它们已经填充了数据。 控制台没有显示您调用console.log时的数据,而是显示此时对象的内容。
要验证这一点,不要将标记实例传递给console.log,而是通过调用console.log(JSON.stringify(markers))
传递 stringified 版本。我打赌它会显示一个空数组。