以下变量my_cords在进入谷歌地图功能时未定义,任何人都可以理解为什么并且可能给我一个解决方法吗?我已经在顶部定义了它并将其设置在回调函数中,我之前看到过它在全局变量上工作..
$(document).ready(function () {
var my_cords;
var map;
function getCareHome() {
geocoder = new google.maps.Geocoder();
//var address = document.getElementById("address").value;
var address = "address here";
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
my_cords = results[0].geometry.location;
} else {
alert("Sorry we couldn't locate the carehome on the map: " + status);
return false;
}
});
var myOptions = {
zoom: 7,
center: my_cords,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
getCareHome();
});
答案 0 :(得分:4)
geocoder.geocode是一个异步函数。设置my_cords
的匿名函数在某个事件(可能是HTTP响应的到来)发生之前不会运行。
将依赖于它的代码移动到该函数内部。
答案 1 :(得分:3)
.geocode
是异步调用。
尝试在函数中使用回调。
例如:
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
createMap(results[0].geometry.location);
} else {
alert("Sorry we couldn't locate the carehome on the map: " + status);
return false;
}
});
var createMap = function(my_cords) {
var myOptions = {
zoom: 7,
center: my_cords,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
答案 2 :(得分:0)
由于geocode
异步运行 ,稍后使用my_cords
(设置myOptions
)的代码会看到my_cords
的值在完成geocode
的完成回调之前 - myOptions.center
将是undefined
。
如果您在设置my_cords
时需要myOptions
,则必须将该代码移动到 geocode
上的回调中。