此代码在我定义pos之后的任何时间中断,然后继续。但是当我正常运行它时它不会显示任何东西。我做错了什么?
function initialize() {
var pos;
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
pos = new google.maps.LatLng(position.coords.latitude,
position.coords.longitude);
}, function() {
handleNoGeolocation(true);
});
}
else { // Browser doesn't support geolocation
handleNoGeolocation(false);
}
var myOptions = {
zoom: 7,
center: pos,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
}
答案 0 :(得分:1)
有趣。你收到错误了吗?你能分享吗?您可能还希望使用console.log()进行调试并围绕它调整try / catch块。我想你可能会在一些旧浏览器中遇到一些问题。
答案 1 :(得分:1)
getCurrentPosition(f, ...)
是异步的,这意味着在成功完成请求后稍后会调用回调f
。但此时函数pos
中的局部变量initialize()
不再在范围内。
您可以通过在全局窗口范围中定义pos
来解决问题。这应该有效,pos
将由回调分配。但是,您不知道何时发生此分配。处理此问题的最佳方法是直接在回调中对pos
执行某些操作,例如将其写入文本字段或将其存储在数据库等中
答案 2 :(得分:0)
也许API调用需要花费一点时间,当它中断时,它会花一点时间来检索它需要的任何数据,所以它能够显示它吗?这只是猜测,但你可以尝试在那里延迟看看会发生什么。