我的实现流程是在页面加载的时候,模拟执行http请求,根据返回值,判断当前所在的城市。然后显示不同城市的数据。
返回的结果如下:
1 {"address":"CN|\u6d59\u6c5f|None|None|CHINANET|None|None","content":{"address_detail":{"province":"\u6d59\u6c5f\u7701","city":"","district":"","street":"","street_number":"","city_code":29},"address":"\u6d59\u6c5f\u7701","point":{"y":"3374952.26","x":"13353719.99"}},"status":0}
然后解析这段json,就可以获取到当前所在的城市,和当前的地理位置经纬度了。
做到这里,没发现有什么端倪。 但当把程序发布后,部署到阿里云后,奇迹出现了,无论我用任何设备访问,获取的位置都是北京。思索很久,也不得所知,毕竟本地执行是正确的。后来无意中发现公司的阿里云的ip就是北京的,而获取到的ip就和阿里云的ip.当时的第一个想法就是百度的接口出现了bug,还蛮天真的给百度提交了bug反馈,希望他们能尽快修复,或者给我一个反馈。结果等了半个月,至今没任何信息。 唉,谁让咱太傻太天真了呢。
后来仔细想想,问题应该就是接口获取到的是服务器端的位置。 因为代码最终是通过客户端发起的请求,然后服务器端在响应的时候运行的。换个思路来讲,如果要定位客户端的话,就必须在客户端执行,想到这里,也就想到了解决方案了,那就是通过js,在客户端获取到位置信息,然后再跳转到对应的城市分站。
<script src="/js/jquery-1.4.4.js"></script> <script> $(function () { $.getJSON("http://api.map.baidu.com/location/ip?ak=此处是百度地图分配的ak&callback=?", function (data) { alert(data.address); }) }) </script> |
由于要客户端执行,要考虑跨域的问题,所以在地址的后面要加上&callback=?,这样就可以调用接口返回来的信息了。
写完收工,大神请悠着点喷。欢迎指点。
还有,大家觉得这个算是一个bug吗?