我已经设法对多达10个地址进行了地理编码,并向地图添加了一个标记,但我需要在geocode (codeAddress)函数之外访问地理编码结果。我认为我可以将结果推送到全局变量数组(userLat,userLng)中。使用警报,我可以看到循环确实将结果添加到函数内的数组中,但在函数外数组是没有价值的。
也许这些问题是相关的?我认为这可能与我对嵌套函数缺乏理解有关。
我希望这一点是清楚的。提前感谢您的帮助!
function codeAddress() {
var useradd = [];
var geocoder = new google.maps.Geocoder();
var howmany = parseFloat(document.getElementById("howmany").value);
for (var i=0; i<howmany; i++) {
useradd[i] = document.getElementById('address['+i+']').value;
geocoder.geocode( {address: useradd[i]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
userLat.push(parseFloat(results[0].geometry.location.lat()));
userLng.push(parseFloat(results[0].geometry.location.lng()));
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
}
else {
alert('Address ' + i + ' was not successfully located for the following reason: ' + status);
}
});
};
}
编辑:
我不确定我是否理解正确,但是已经提取了回调函数并创建了一个新的函数,该函数由地理编码器调用。问题仍然是一样的,变量userLat和userLng没有被带到循环之外。有什么建议吗?
函数codeAddress() {
function callBack() {
return function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
userLat.push(parseFloat(results[0].geometry.location.lat()));
userLng.push(parseFloat(results[0].geometry.location.lng()));
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
}
else {
alert('Address ' + i + ' was not successfully located for the following reason: ' + status);
}
}
}
var userLat = [];
var userLng = [];
var useradd = [];
var geocoder = new google.maps.Geocoder();
var howmany = parseFloat(document.getElementById("howmany").value);
for (var i=0; i<howmany; i++) {
useradd[i] = document.getElementById('address['+i+']').value;
geocoder.geocode({address: useradd[i]}, callBack());
};
}
发布于 2012-11-28 12:27:16
当您的codeAddress
函数返回时,geocoder.geocode
仍然在做它的工作,这是异步的。当geocoder.geocode
完成时,它将调用它的回调,您将该回调作为匿名函数传递。
我建议的解决方案是使回调函数成为codeAddress
的参数,并从该回调(或从在回调中调用的其他函数)中执行所需的任何操作,而不是使用全局变量方法。
发布于 2012-11-28 12:29:17
这一切都与Javascript中的作用域有关。如果要访问函数外部的变量,则必须在函数作用域之外声明和创建变量,然后更新它们。
在函数作用域之外声明的变量将在脚本中的任何其他位置可用。
var def = "bombshell";
function changer(){
def = "changed value";
}
changer();
alert(def);
https://stackoverflow.com/questions/13604851
复制相似问题