希望实现的功能:进入页面利用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}