项目场景:
前端JS请求百度地图API接口
问题描述:
get请求发出后,能在控制台看到返回的数据,但无法进入回调函数,而进入了failed对应的函数
原出错代码为
$.get(
"http://api.map.baidu.com/reverse_geocoding/v3/",
{ak:'你的ak',output:'json',coordtype:'wgs84ll',location:'21.683533108387'+','+'110.92324182065'},
function (data) {
alert('成功')
},
"jsonp"
).fail(function(data){
alert("有毛病了");
});
能够看到响应回来的数据
出错原因
由于百度的一些安全策略,以及对用户的保护,对于跨域请求则需要使用Jsonp返回体格式
关于Jsonp
服务端会给客户端的请求返回一段JavaScript代码
通过客户端请求时指定的回调函数去运行得到数据,
解决方案:
将get的返回参数格式设置为jsonp,则get请求不会报failed
dataType: 'jsonp'
结合了网上关于前端跨域请求jsonp的实现的一些文章
修改代码,配合注释应该能看得懂
<script>
loc='21.683533108387'+','+'110.92324182065'
$.ajax({
//设置请求类型
type:"get",
//请求超时时间
timeout:5000,
//设置请求地址
url: 'http://api.map.baidu.com/reverse_geocoding/v3/',
//设置需要发送的数据
data: {ak:'你的ak', output:'json', coordtype:'wgs84ll', location:loc},
//定义此请求为跨域请求
dataType: 'jsonp',
//定义回调函数
jsonpCallback:"callbackUser",
success: function (data) {
console.log("成功");
},
error: function (data) {
console.log(data)
}
})
function callbackUser(data){
alert(data.result.formatted_address);
}
</script>
其实在百度地图官方操作文档中也有对于jsonp相关的要求,由于非必须,被我忽略了
大家也可以去尝试修改
最终我成功运行并alert出数据
2020.12.4