我有一个严重的问题,我已经尝试调试几天了。 我有一个脚本,可以获取用户当前的纬度和经度,然后将它们存储在变量中。但是,当我尝试在此函数之外和// init映射区域中使用这些变量时,映射只是没有显示出来。通过警告变量,我可以看到位置函数变量外部设置为“未定义”。这是我的代码:
//main function here
function initialize() {
var lat;
var lon;
//check if user has geo feature
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(
//get position
function(position){
lat = position.coords.latitude;
lon = position.coords.longitude;
},
// if there was an error
function(error){
alert('ouch');
});
}
//case the users browser doesn't support geolocations
else {
alert("Your browser doesn't support geolocations, please consider downloading Google Chrome");
}
//init map
var myOptions = {
center: new google.maps.LatLng(lat, lon),
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
}
感谢任何帮助,Ariel
答案 0 :(得分:4)
这是因为你在函数中声明了你的变量。变量对 initialize
函数是私有的,只能从其中访问。如果您需要能够在初始化函数之外访问变量,那么将变量声明移出函数。
var lat;
var lon;
function initialize() {
...
在JavaScript中查看有关变量范围的MDN article。
击>
<强>更新强>
再次查看代码我意识到问题不是变量范围,因缩进而感到困惑。我不熟悉Geolocation API,但我认为问题可能是navigator.geolocation.getCurrentPosition()
是异步的,因为它必须等待用户允许网站获取设备的位置。因此,在检索到实际位置之前,将分配myOptions
- lat
&amp; <{1}}分配后,lng
仍未定义。
请改为尝试:
myOptions
答案 1 :(得分:0)
更多关于另一个答案的更正。 范围的问题无关紧要。正如原始代码lat
和lon
中所定义的那样,在问题作者使用的上下文alert
范围内。
这是一个证明它的可运行的例子。
function getPos( f ) {
var position = new Object();
position.coords = new Object();
position.coords.latitude = 5;
position.coords.longitude = 10;
f( position );
}
function initialize() {
var lat;
var lon;
getPos(
function(position){
lat = position.coords.latitude;
lon = position.coords.longitude;
}
);
alert( lat + " " + lon );
}
initialize(); //expected 5 & 10
无论如何,这似乎不是一个纯粹的JS问题。对于您正在使用的任何谷歌API,这似乎是一个问题。这个问题应该被贴上标签,因为我不知道这个API或者你是否错误地调用它。