我一直在使用JavaScript和jQuery一段时间。但我仍然没有完全掌握这一切是如何运作的。如果我的问题多余,难以理解和/或简单愚蠢,我会为此道歉。
我正在使用Google Maps API v3与jQuery(没有插件,只是简单的jQuery)一起使用伦敦地图填充div#googleMap
。除此之外,我正在尝试编写一个函数来获取给定地址的坐标(Geocoding)。我要对这些坐标做些什么是另一回事。
我的问题在于以下代码:
jQuery(document).ready(function($) {
mapObject = initGoogleMaps();
coordinates = getCoordinates('United Kingdom');
console.log(coordinates.toString());
function initGoogleMaps() {
google.maps.visualRefresh = true;
map = new google.maps.Map($("#googleMap")[0], {
center: new google.maps.LatLng(51.511214, -0.119824),
zoom: 10,
heading: 0,
mapTypeId: google.maps.MapTypeId.ROADMAP,
disableDefaultUI: true,
disableDoubleClickZoom: true,
draggable: false,
keyboardShortcuts: false,
scrollwheel: false,
backgroundColor: 'transparent'
});
return map;
}
function getCoordinates(address) {
fallback = 'London, United Kingdom';
geocoder = new google.maps.Geocoder();
address = typeof(address) == 'string' ? address : fallback;
coordinates = '';
geocoder.geocode({ 'address':address },
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
coordinates = results[0].geometry.location;
} else {
coordinates = 'Location: "' + address + '" not found.\n' +
'Status: ' + status;
}
});
return coordinates;
}
}); // jQuery(document)
我正在使用Chrome DevTools,更具体地说,是谷歌Chrome内置的Javascript Console。
当我刷新页面时,我得到的输出是:
Coordinates: ↩
我想也许Maps API
在地理位置编码方面不成功。但...
Location "London Heathrow" not found.
coordinates
之外宣布$.ready()
并在控制台中打印完空消息后输入coordinates
,按下返回,它给了我:coordinates ▸
M {jb: 55.378051, kb: -3.43597299999999, toString: function, b: function, equals: function…}
哪个奇怪。在我看来,coordinates
标识符已分配一个空字符串(''
)值。为什么?在我使用getCoordinates()
标识符之前,我调用了coordinates
函数。
$(document).ready(function(){...})
内的指令是否可能以任何特定顺序执行?或者是因为通过Maps API获取results
时的延迟?如何在获取并分配console.log(...)
的值后才能获得coordinates
指令?
也许这是我忽视的一些愚蠢的错误。
答案 0 :(得分:0)
您的coordinates = '';
超出了.geocode
回调功能的范围。您需要var coordinates = '';
代替。