我正在尝试在我的网页中嵌入带有标记的谷歌地图。但是如果我使用以下代码
,我将收到一条未定义的警报消息var infowindow = null;
var geocoder;
$(document).ready(function () { initialize(); });
function codeAddress(address) {
geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
//alert(results[0].geometry.location);
return (results[0].geometry.location);
}
});
}
function initialize() {
default_location = codeAddress("<?php echo $location;?>");
alert(default_location);
}
而不是如果我在codeAdress函数中执行警报,如下所示,它正确显示纬度和经度。
var infowindow = null;
var geocoder;
$(document).ready(function () { initialize(); });
function codeAddress(address) {
geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
alert(results[0].geometry.location);
}
});
}
function initialize() {
codeAddress("<?php echo $location;?>");
}
有人可以确定问题是什么吗?我是javascripts的新手
答案 0 :(得分:3)
地理编码器调用是异步的,这意味着它需要一些时间才能返回,并且不遵循所写的顺序。它还意味着在第一位,函数在到达return (results[0].geometry.location)
语句之前完成。所以alert
无需显示任何内容。
除了在geocode
请求中插入语句之外,您还可以编写一个回调模式来分隔脚本逻辑。在geocode
调用成功时执行回调,该回调将位置作为参数传递。
var infowindow = null;
var geocoder = new google.maps.Geocoder();
$(document).ready(function () { initialize(); });
function codeAddress(address, callback) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
callback(results[0].geometry.location);
}
});
}
function initialize() {
codeAddress("Chicago, IL", function(default_location) {
var map = new google.maps.Map(document.getElementById("map_canvas"),
{ center: default_location,
zoom: 3, mapTypeId: google.maps.MapTypeId.ROADMAP });
locations = ["Los Angeles", "Davis", "Truth or Consequences",
"Ann Arbor", "Massachusetts"];
for (var i = 0; i < locations.length; i++) {
codeAddress(locations[i], function(latLng) {
new google.maps.Marker({map:map, position:latLng});
});
}
});
}
答案 1 :(得分:0)
地理编码不会立即返回结果。这就是为什么在代码的第一个版本中什么也得不到的原因。因此,如果您想对地理编码结果执行某些操作,则应在回调函数中执行此操作,就像在代码的第二个版本中一样。
答案 2 :(得分:0)
您
return (results[0].geography.location);
仅返回嵌套函数的值,而不是codeAddress函数的值。也许如果侯告诉我们你想要做什么,我们可以提供帮助。