var address = "Boston";
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
map.fitBounds(results[0].geometry.bounds);
createLatLng();
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
function createLatLng() {
var MapCenter=map.getCenter();
var x=MapCenter.lat(), y=MapCenter.lng(), z=0;
}
现在我有了这段代码,大部分来自google:https://developers.google.com/maps/documentation/javascript/geocoding的这个例子。
现在x和y变量未定义。为什么这样,我怎样才能正确得到x和y变量?
如果它有帮助,这里也是演示:http://jsbin.com/ilOTIQIn/1/edit
答案 0 :(得分:1)
由于geocode
是异步的,因此您无法在所需的位置设置MapCenter
,因为此时API调用的结果不会返回。我建议您使用callback
来帮助您管理通话:
var MapCenter, map, x, y, z;
function geocode(callback) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
map.fitBounds(results[0].geometry.bounds);
callback();
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
geocode(function () {
MapCenter = map.getCenter();
x = MapCenter.lat(), y = MapCenter.lng(), z = 0;
});
答案 1 :(得分:1)
Javascript是一种异步语言。您的地理编码请求将被发送,并且在发生这种情况时,将评估您的x,y和z变量。然后返回您的地理编码结果,但已设置x,y和z变量。我会在函数上面定义你的x,y,z变量,然后在那里检查状态是否为'ok'将它们设置在那里。
感知事件顺序:
事件的实际顺序: