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 加载

地理定位 - 异步回调无法使用错误 - Javascript

手机地理定位和javascript

在表单发布之前执行地理定位 javascript

地理定位 api javascript

jquery移动地理位置