javascript, jquery 地理定位错误
Posted
技术标签:
【中文标题】javascript, jquery 地理定位错误【英文标题】:javascript, jquery geolocation bug 【发布时间】:2015-10-01 23:05:32 【问题描述】:我有以下代码:
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(function(posi)
var lat = posi.coords.latitude;
var lon = posi.coords.longitude;
console.log(lat);
, showError);
else
$(".position").html("Geolocation is not supported by this browser");
function showError(error)
switch (error.code)
case error.PERMISSION_DENIED:
alert("User denied the request for Geolocation.");
break;
case error.POSITION_UNAVAILABLE:
alert("Location information is unavailable.");
break;
case error.TIMEOUT:
alert("The request to get user location timed out.");
break;
case error.UNKNOWN_ERROR:
alert("An unknown error occurred.");
break;
alert(lat);
$(".weather").html("<p>" + lat + "</p>");
问题是在底部的警报(纬度)上说 它是未定义的,并且在 if 条件开始时为 console.log(lat) 工作得很好!底部有什么问题? 我曾尝试在 if 之前将全局变量设为 lon,lat,但同样的事情发生了。
【问题讨论】:
geolocation
是异步的。您正试图在返回数据之前提醒它。在回调中使用它。请注意,警报在 console.log()
之前触发
谢谢我试试!!!
是...在log()
之前触发警报。这就是异步操作的工作原理......发送和接收请求需要时间
第二个问题是变量lat的范围。您在匿名函数中定义它,因此它在警报中始终未定义。尝试在 if 语句之前移动变量定义。
即使我将其定义为外部全局,我也遇到了同样的问题.. 冲突一定是异步概念。
【参考方案1】:
作为参考,这里是更正的代码,基于早期的 cmets:
function showError(error)
[...] // No change.
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(function(posi)
var lat = posi.coords.latitude;
var lon = posi.coords.longitude;
console.log(lat);
alert(lat);
$(".weather").html("<p>" + lat + "</p>");
, showError);
else
$(".position").html("Geolocation is not supported by this browser");
【讨论】:
以上是关于javascript, jquery 地理定位错误的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 不会使用带有导航地理定位的 jQuery Mobile 加载