jQuery Geolocation:无法读取未定义的属性“坐标”

Posted

技术标签:

【中文标题】jQuery Geolocation:无法读取未定义的属性“坐标”【英文标题】:jQuery Geolocation : Cannot read property 'coords' of undefined 【发布时间】:2017-09-08 21:53:45 【问题描述】:

我已经浏览了几个小时来寻找解决方案。 我对javascript的了解不多,其实我正在学习它。

在获取用户的 GPS 位置时遇到问题。我想 : - 获取用户的位置(jQuery)。 - 通过 Ajax > php 将其传输到服务器端。

这是我的 JS 代码:

$(document).ready(function () 
    initCoords();
);

function initCoords() 
    if (navigator.geolocation)
    
        navigator.geolocation.getCurrentPosition(updateLocation, errorHandler, enableHighAccuracy: false, maximumAge: 60000, timeout: 27000);
     else
    
        alert('Wrong browser.');
    


function updateLocation(position)

    var longitude=position.coords.longitude;
    var latitude=position.coords.latitude;
    console.log(longitude);
    $.ajax(
        url: "../../ajax/account/handlegeolocation",
        type: "post",
        dataType: "json",
        data: "longitude": longitude, "latitude": latitude,
        success: function (response) 
            console.log(response.message);
        ,
        error: function (xmlhttprequest, textstatus, message) 
            console.log(message);
        
    ).then(function () 
        setTimeout(updateLocation, 30);
    );


function errorHandler(error)

    console.log('Geolocation error : code ' + error.code + ' - ' + error.message);

令我惊讶的是加载页面时看到的内容。 位置返回了,但是JS说返回位置的对象是未定义的。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

这是因为您没有从

传递位置对象
setTimeout(updateLocation, 30);

从超时调用函数initCoords 将解决您的问题。

或者这是您的代码,经过一些编辑并且没有任何错误。

$(document).ready(function () 
    initCoords();
);

function initCoords() 
    if (navigator.geolocation) 
        getGeoLocation();
     else 
        alert('Wrong browser.');
    

function getGeoLocation() 
    navigator.geolocation.getCurrentPosition(updateLocation, errorHandler,  enableHighAccuracy: false, maximumAge: 60000, timeout: 27000 );

function updateLocation(position) 
    var longitude = position.coords.longitude;
    var latitude = position.coords.latitude;
    $.ajax(
        url: "../../ajax/account/handlegeolocation",
        type: "post",
        dataType: "json",
        data:  "longitude": longitude, "latitude": latitude ,
        success: function (response) 
            console.log(response.message);
        ,
        error: function (xmlhttprequest, textstatus, message) 
            console.log(message);
        
    ).then(function () 
        setTimeout(getGeoLocation, 30);
    );


function errorHandler(error) 
    console.log('Geolocation error : code ' + error.code + ' - ' + error.message);

【讨论】:

谢谢!它正在工作,但在页面加载时不传输数据。这意味着只有在达到第一个超时时才传输 POST 数据。然后,一切正常。你有什么想法吗? JavaScript 没有错。如果您遇到问题,那么它必须在服务器端。 30 毫秒的更新时间也太短了。

以上是关于jQuery Geolocation:无法读取未定义的属性“坐标”的主要内容,如果未能解决你的问题,请参考以下文章

检查jQuery中的未定义和空值

jQuery Waypoints 错误“未定义通知”

GetOrgChart:尚未定义父节点的节点

Firefox 4 中的 JQuery 未定义和 $ 未定义错误 [关闭]

在 BigQuery 中读取时,未定义行 XXXX、列 xx-xx 处的 JSON 输入意外结束

React中没有自定义库的Google地图:无法读取属性setState of null