js-web跨域实现百度地图普通ip定位

希望实现的功能:进入页面利用IP自动获取用户当前位置

使用工具:百度地图API—普通IP定位API·web服务API
普通IP定位API官网文档

使用百度IP定位功能,需要3步骤:

第一步,申请密钥(AK) ,作为访问服务的依据;
第二步,拼写发送HTTP/HTTPS请求的URL,注意需使用第一步申请的AK;
第三步,接收HTTP/HTTPS请求返回的数据(JSON格式)。

接口示例:

http://api.map.baidu.com/location/ip?ak=请输入您的AK&coor=bd09ll

https://api.map.baidu.com/location/ip?ak=请输入您的AK&coor=bd09ll

返回数据:

{  
    address: "CN|北京|北京|None|CHINANET|1|None",    #地址  
    content:    #详细内容  
    {  
        address: "北京市",    #简要地址  
        address_detail:    #详细地址信息  
        {  
            city: "北京市",    #城市  
            city_code: 131,    #百度城市代码  
            district: "",    #区县  
            province: "北京市",    #省份  
            street: "",    #街道  
            street_number: ""    #门址  
        },  
        point:    #当前城市中心点,注意当前座标返回类型
        {  
            x: "116.39564504",  
            y: "39.92998578"  
        }  
    },  
    status: 0    #返回状态码  
}

一开始使用ajax请求地址获取返回的定位信息,发现报错,原因是无法跨域。
然后各种问度娘,发现jsonp最好使。

//ip获取位置
    /**
    * http://api.map.baidu.com/location/ip?ak=你的密钥&coor=bd09ll
    */
    var url = 'http://api.map.baidu.com/location/ip';
    var data = {
        ak: "你的密钥",
        coor: "bd09ll",
        callback: 'jsonpcallback'//对应值为自定义回调函数名
    };
    //组合url
    var buffer = [];
    for (var key in data) {
        buffer.push(key + '=' + encodeURIComponent(data[key]));
    }
    var fullpath = url + '?' + buffer.join('&');
    console.log(fullpath);
    CreateScript(fullpath);
    //生成script
    function CreateScript(src){
        var el = document.createElement('script');
        console.log(el);
        el.src = src;
        el.async = true;
        el.defer = true;
        document.body.appendChild(el);
    }
    //自定义回调函数,重点
    function jsonpcallback(rs) {
        // var rs = JSON.stringify(rs);
        var city = rs['content']['address_detail']['city'];
            city = city.toString().substr(0,city.length - 1);
        console.log(rs);//百度地图返回值
        //console.log(city);//城市名称,去掉最后的“市”
        //console.log(rs['content']['point']['x'],',',rs['content']['point']['y']);//座标
    }

基本原理是,在页面添加一行script,利用get获取,这里务必要有callback才行

<script src="你的请求地址" async defer></script>

获取到的返回值:

Object {address: "CN|省份名|城市名|None|CHINANET|0|0", content: Object, status: 0}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章