为了账号安全,请及时绑定邮箱和手机立即绑定

geoloc.getCurrentPosition有时不起作用

geoloc.getCurrentPosition有时不起作用

geoloc.getCurrentPosition有时不起作用因此,我有一个非常简单的JS使用导航器.geolocation.getCurrentPoitationjammy。$(document).ready(function(){   $("#business-locate, #people-locate").click(function() {     navigator.geolocation.getCurrentPosition(foundLocation, noLocation);   });   navigator.geolocation.getCurrentPosition(foundLocation, noLocation);   function foundLocation(position) {     var lat = position.coords.latitude;     var lon = position.coords.longitude;     var userLocation = lat + ', ' + lon;     $("#business-current-location, #people-current-location").remove();     $("#Near-Me")       .watermark("Current Location")       .after("<input type='hidden' name='business-current-location' id='business-current-location' value='"+userLocation+"' />");     $("#people-Near-Me")       .watermark("Current Location")       .after("<input type='hidden' name='people-current-location' id='people-current-location' value='"+userLocation+"' />");   }   function noLocation() {     $("#Near-Me").watermark("Could not find location");     $("#people-Near-Me").watermark("Could not find location");   }})//end DocReady基本上,我们得到的是当前位置,如果得到了,两个“水印”放置在两个字段中,上面写着“当前位置”,两个隐藏字段是以长数据作为值创建的(它们在开始时被删除,这样它们就不会每次都被复制)。还有两个按钮有一个点击函数绑定到它们来做同样的事情。不幸的是,每隔三次左右,它就起作用了。这里有什么问题?
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我一直在一点儿没错同样的问题,在网上几乎找不到任何关于它的信息。书上什么都没有。最后,我在堆栈溢出和(ha!)上找到了这个清醒的查询。这是我在这里设立账户所需要的最后动力。

我有一个部分的答案,但遗憾的是,不是一个完整的答案。

首先,要意识到默认超时对于getCurrentPosition是无限(!)这意味着您的错误处理程序将不叫如果getCurrentPosition挂在后端的某个地方。

要确保获得超时,请将可选的第三个参数添加到getCurrentPosition调用中,例如,如果您希望用户等待不超过10秒才能提示发生了什么,请使用以下命令:

navigator.geolocation.getCurrentPosition(successCallback,errorCallback,{timeout:10000});

其次,在不同的情况下,我经历了完全不同的可靠性。在家里,我会在一两秒钟内得到一个回调,虽然精度很低。

然而,在工作中,我的行为发生了非常奇怪的变化:地理定位在一些计算机上一直都在工作(当然IE除外),其他的只在Chrome和Safari中工作,而不使用Firefox(壁虎问题?),其他的只工作一次,然后就失败了-这种模式每天都在一小时地变化。有时你有一台“幸运”的电脑,有时却没有。也许在满月时宰杀山羊会有帮助?

我不知道这件事,但我怀疑后端基础设施比宣传的要不均衡。在推动这一功能的各种宫浩书籍和网站中。我真的希望他们能更直截了当地说出这个特性有多不稳定,而且如果希望错误处理程序正常工作,超时设置是多么重要。.

我今天一直在尝试向学生们传授这些东西,我自己的电脑(在投影机和几个大屏幕上)默默地失败了,而大约80%的学生几乎马上就得到了结果(使用完全相同的无线网络)。当我的学生也在打字和其他错误,当我自己的个人电脑也在失败的时候,解决这些问题是非常困难的。

不管怎么说,我希望这能帮到你们中的一些人。谢谢你的精神健康检查!


查看完整回答
反对 回复 2019-07-12
?
MYYA

TA贡献1868条经验 获得超4个赞

这是我要解决的问题,至少在当前的所有浏览器中都能工作(在Windows上,我没有Mac):

if (navigator.geolocation) {
    var location_timeout = setTimeout("geolocFail()", 10000);

    navigator.geolocation.getCurrentPosition(function(position) {
        clearTimeout(location_timeout);

        var lat = position.coords.latitude;
        var lng = position.coords.longitude;

        geocodeLatLng(lat, lng);
    }, function(error) {
        clearTimeout(location_timeout);
        geolocFail();
    });} else {
    // Fallback for no geolocation
    geolocFail();}

如果有人在Firefox上单击“关闭”或选择“NO”或“从不共享”选项,这也会有效。

笨重但有效。


查看完整回答
反对 回复 2019-07-12
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

我每次都这样:

navigator.geolocation.getCurrentPosition(getCoor, errorCoor, {maximumAge:60000, timeout:5000, enableHighAccuracy:true});

虽然不是很准确。有趣的是,在同一台设备上,如果我运行这台设备,它会把我推到100米左右(每次),但如果我去谷歌地图,它就能准确地找到我的位置。因此,尽管我认为enableHighAccuracy:true有助于它持续工作,但它似乎并不能使它更加准确.


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 1331 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信