gpt4 book ai didi

javascript - firefox 位置感知 + javascript 作用域

转载 作者:行者123 更新时间:2023-11-30 13:32:47 25 4
gpt4 key购买 nike

我主要使用 PHP 编写代码,我对 JavaScript 范围没有广泛的了解;希望有人能很快解决我的问题。如评论所示,检查 mapCenter.Latitude 和 mapCenter.Longitude - 它们看起来是空的。

如果位置感知在浏览器中可用,则 if 将执行 - 我确定它对我有用,我用 alert() 对其进行了测试。此外,我知道它正在正确地获取 position.coords.latitude/longitude,因为我也用 alert() 测试了这些……但是这些值在函数之外并不持久。这可能是微不足道的 - 解决方法是什么?

function load(){
map = new VEMap('MapDiv');
map.LoadMap();
mapCenter = new VELatLong();
if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position)
{
mapCenter.Latitude = position.coords.latitude;
mapCenter.Longitude = position.coords.longitude;

});
}

//Inspecting mapCenter.Latitude & mapCenter.Longitude shows empty...

map.SetCenterAndZoom(mapCenter, 15);
...
...
}

谢谢!

最佳答案

getCurrentPosition 接受一个回调,告诉我它正在执行一个异步操作。因此,正在发生的事情是匿名函数中的代码很可能在 map.setCenterAndZoom(mapCenter, 15) 被调用后执行。当您使用异步操作时,执行会在异步调用之后继续进行,而无需等待完成(因此是异步的)。因此,如果您依赖于来自异步调用的任何数据,则需要确保在回调中处理它,否则您很可能无法使用它。

您应该做的是像这样您的回调中调用:

function load(){
map = new VEMap('MapDiv');
map.LoadMap();
mapCenter = new VELatLong();
if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position)
{
mapCenter.Latitude = position.coords.latitude;
mapCenter.Longitude = position.coords.longitude;
map.SetCenterAndZoom(mapCenter, 15);
//any other code that needs to deal with mapCenter
});
}
}

map 将在匿名函数内可用,因为它的行为类似于闭包,因此它在词法上绑定(bind)到定义它的范围。

关于javascript - firefox 位置感知 + javascript 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com