我想使用纬度和经度向气象服务器发出请求,我对获取纬度和经度没有任何问题 - 它显示在我的HTML中完美附加。神秘的是,当我尝试使用服务器请求和console.log()的纬度和经度变量时,它们是未定义的。应该定义它们,因为window.property
使变量property
成为全局范围。看看代码:
function getLocation(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition); //Runs the function "showPosition()"
}
else {
locationDisplay.innerHTML = "Could not find your location, please enter one manually.";
}
}
function showPosition(position){
window.latitude = Math.floor(position.coords.latitude); //latitude as integer
window.longitude = Math.floor(position.coords.longitude); //longitude as integer
locationDisplay.innerHTML = "Latitude: " + window.latitude + "<br> Longitude: " + window.longitude;
} //.innerHTML adds the coordinates to a div called locationDisplay
getLocation();
console.log(window.latitude + " " + window.longitude);
另一个稍微相关的问题:天气服务是否足够准确地描述纬度和经度整数的位置,还是应该使用一些小数点?
答案 0 :(得分:1)
navigator.geolocation.getCurrentPosition(showPosition);
未运行showPosition
函数。
您将此作为成功回调方法传递给navigator.geolocation.getCurrentPosition
。 (这是异步调用)。
showPosition
将在getCurrentPosition
函数成功后执行。而console.log(window.latitude + " " + window.longitude);
尝试在window.latitude and window.longitude
完成任务之前获取getCurrentPosition
值。在那个时间点,两个变量都只是未定义的。
要避免这种情况,可以采用快速解决方法
使用setTimeout or setInterval
等待getCurrentPosition响应。或者使用默认值设置showPosition
函数之外的全局变量。