因为公司项目需求,需要在客户浏览网站的时候获取客户登录时的ip以及其所在地域,原本是用的搜狐的ip定位接口,但是最近经常出现定位不准,出现China的情况,没办法就只有换接口,对于ip定位的api还是有不少,除了搜狐还有新浪、腾讯、站长之家、太平洋等等,但是考虑到搜狐的情况,所以在选择上还是纠结了很久,最终选择了用百度的ip定位。


使用百度的api首先就需要登录到百度的开发平台,并申请key密钥,申请后设置白名单,然后就可以愉快的使用api了,但是,问题就出现了,原本搜狐的api返回的json数据是

var returnCitySN = {"cip": "222.209.149.255", "cid": "510100", "cname": "四川省成都市"};

这种格式的json,可以直接在js里通过

var ip=returnCitySN['cname'];

来获取数据,但是百度的api返回的数据却是这样的

{
 "address": "CN|四川|成都|None|CHINANET|0|0",
 "content": {
   "address": "四川省成都市",
   "address_detail": {
     "city": "成都市",
     "city_code": 75,
     "district": "",
     "province": "四川省",
     "street": "",
     "street_number": ""
   },
   "point": {
     "x": "104.06792346",
     "y": "30.67994285"
   }
 },
 "status": 0
}

问题就来了,这种格式的数据没有变量名该怎么去获取呢,自己对json也没什么研究,没办法只有百度,但是百度了很久 尝试了各种方法就是无法获取这个数据,原本以为很简单的没想到在这里就花了我好几个小时的时间去研究和尝试,有些方法还涉及到跨域的问题,还专门去w3cschool里看了下json的教程,教程里的方法也都尝试过,都没办法获取,最后通过bing搜素终于发现了一个叫jsonp的高科技,通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,来获取到json数据,用法如下:

<script src="http://api.map.baidu.com/location/ip?ak=xxxx"></script>
//调用ip定位api,xx为密钥
<script type="text/javascript" charset="UTF-8">

   $.ajax({
       url:"http://api.map.baidu.com/location/ip?ak=Otvff2qhaLKNoEF4d764zsx5ikEXeGtI&coor=bd09ll&qq-pf-to=pcqq.c2c",
       dataType:'jsonp',
       data:'',
       type:"get",
       success:function(result) {
           var ip=result.content.address;
           alert(ip);
       },

   });
</script>

最终得到的结果:

四川省成都市

纠结了大半天的问题也终于得到了解决,通过这次经历也再次的认识到做程序的,遇到问题始终还是要靠自己去解决,问别人是没用的,自己去解决才能更深刻的理解和记忆!

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!