1

我在地理定位的最基本方面遇到了麻烦 - 无论我做什么,我似乎都无法触发回退。这是代码:

if (navigator.geolocation) {

navigator.geolocation.getCurrentPosition(function(position){

var latitude = position.coords.latitude;  
var longitude = position.coords.longitude;
var latNum = parseFloat(latitude);
var longNum = parseFloat(longitude);

紧随其后的是一组嵌套的 if...else if 语句,这些语句根据用户在多个定义区域之一中的位置触发不同的功能,以及一个 else 语句来捕获用户不在任何区域的条件定义的位置。这部分一切正常,包括最后的“其他”条件。如果用户的设备没有启用地理定位,或者用户在出现提示时拒绝访问位置数据,则会失败。

应该捕获这一点的代码很简单:

} else {
   function10();
}

我已经在 FF、Safari 和 Chrome 中尝试过,结果相同:如果我在提示时禁用位置服务或拒绝访问,则不会触发最终的“else”功能。

我看过无数关于地理定位的优雅失败的例子,但不明白为什么它不起作用。

对于我出错的任何线索,我将不胜感激。

4

1 回答 1

3

好的 - 问题解决了!我不确定我是觉得自己很傻还是很开明,但为了其他有同样问题的人的利益,这里是解决方案:

if (navigator.geolocation) {

navigator.geolocation.getCurrentPosition(function(position){

 // Do something here if you get position data

    },

function() {

// Do something else if you don't get any position data 
           }
       ); 
     } 

我认为我出错的地方是我需要寻找function(position)启用地理定位的代理的故障而不是缺少启用的代理。同一个 if 条件中的第二个函数提供了在浏览器没有返回位置数据的情况下的操作,无论是什么原因。原始代码(上图)中最后的“else”语句只会在没有地理定位能力的设备上触发。

现在这一切都说得通了,但我不得不说谷歌上的文档,许多教程网站对此还很不清楚,经常引用我的初始语法,涵盖了未启用地理定位能力的情况(与未启用不同)展示)。

感谢这个关于 SO 的答案为我指明了正确的方向。

于 2013-05-18T08:39:32.117 回答