Heim  >  Fragen und Antworten  >  Hauptteil

javascript - 如何通过js获取当前用户所在城市

如何通过js获取当前用户所在城市?
例如美团这些团购网站。
geolocation可以获取用户的坐标,但用这种方法获取城市需要在进行一次转换。
有没有简单的方法获取用户所在城市?因为不同城市的信息有所不同,多谢。

高洛峰高洛峰2749 Tage vor558

Antworte allen(5)Ich werde antworten

  • PHP中文网

    PHP中文网2017-04-10 14:32:21

    如果是自己写的话,简单方法肯定没有,一般都是经纬度然后你自己判断的,你想想,浏览器怎么可能会被你存上中国各省各市的地名呢..反正我觉得不大可能。如果你正好调用了百度地图,可以看看下面这个API。
    http://developer.baidu.com/map/jsdemo.htm#i8_2

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:32:21

    一般一个地区会固定使用某一IP地址段,因此可以通过判断用户的IP地址来确定用户所在的城市。而你可以使用一些第三方的IP数据库。

    Antwort
    0
  • 怪我咯

    怪我咯2017-04-10 14:32:21

    大部分网站应该都是通过服务端获取用户的 ip, 然后从 ip 库中匹配城市,所以会经常看到一些网站有时匹配的不准确。

    楼主说的通过 Geolocation 技术上是可行的,但是获取坐标会有以下一些问题:

    1. 部分老的浏览器不支持 Geolocation(参见浏览器支持情况),当然这个问题可以通过判断浏览器是否支持 Geolocation, 如果浏览器不支持,通过服务器获取用户的 ip,再匹配城市。
    2. 在桌面浏览器上,Geolocation 一般使用 IP 地址定位、WIFI 定位,使用 IP 地址定位的话,定位也不精确,(参考位置信息获取方式对比)。
    3. 另外,使用 Geolocation 需要用户授权同意使用他的位置信息。

    Antwort
    0
  • PHPz

    PHPz2017-04-10 14:32:21

    更简单有效的方式是服务端程序获取用户的IP,匹配一个IP库的地址。JS无法获取IP。通过获取坐标的方法楼主自己也知道不太可行。为什么非得吊死在JS上面。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-10 14:32:21

    $.getScript('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js', function(){
        //console.log(remote_ip_info);
    });
    

    简单一点的,百度地图API貌似复杂了点

    另外居于我写的居于geolocation例子

    if (navigator.geolocation)
            {
            navigator.geolocation.getCurrentPosition(showPosition, showErr);
            }
        function showPosition(position){
            //alert(position.coords.latitude+','+position.coords.longitude);
            // ak = appkey 访问次数流量有限制
            $.getJSON('http://api.map.baidu.com/geocoder/v2/?ak=71709218d45a706b9c7e3abc2f037b23&callback=?&location='+position.coords.latitude+','+position.coords.longitude+'&output=json&pois=1', function(res){
                    //addressComponent => {city: "广州市", district: "天河区", province: "广东省", street: "广州大道", street_number: "中922号-之101-128"} 
                    $("#location").html(res.result.addressComponent.city);
            });
        }
        function show(msg){
            alert(msg)
        }
        function showErr(error){
            var result;
            switch(error.code) 
            {
            case error.PERMISSION_DENIED:
              result="User denied the request for Geolocation."
              break;
            case error.POSITION_UNAVAILABLE:
              result="Location information is unavailable."
              break;
            case error.TIMEOUT:
              result="The request to get user location timed out."
              break;
            case error.UNKNOWN_ERROR:
              result="An unknown error occurred."
              break;
            }
            alert(result);
        }
    

    Antwort
    0
  • StornierenAntwort