因为是跨域请求,所以在beforeSend里用setRequestHeader设置请求头。
通过$.when();实现先通过ajax访问api获取到值后再继续_showMap()的操作。形式:$.when(ajax,ajax)done(_showMap());
如果是这种形式:ajax;ajax;_showMap();就是把ajax和_showMap()方法都按顺序放的话,会导致_showMap()里获取的经纬度为undefined,因为这是跨域请求的问题。
function getApiAddress(start_address, end_address){
var start_Arr = [];
var end_Arr = [];
var apk = "自己的密钥";
var url = "https://api.map.baidu.com/geocoder/v2/";
var start_address_Data = {
address:start_address,
output:"json",
ak:apk
};
var end_address_Data = {
address:end_address,
output:"json",
ak:apk
};
$.when(
$.ajax({
url: url,
dataType: 'jsonp',//这里必须为jsonp
type: 'GET',
data: start_address_Data,
beforeSend: function (xhr) {
xhr.setRequestHeader("Access-Control-Allow-Headers", "Content-Type, api_key, Authorization");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
},
success: function (ret) {
start_Arr.push(ret.result.location.lng);
start_Arr.push(ret.result.location.lat);
}
}),
$.ajax({
url: url,
dataType: 'jsonp',//这里必须为jsonp
type: 'GET',
data: end_address_Data,
beforeSend: function (xhr) {
xhr.setRequestHeader("Access-Control-Allow-Headers", "Content-Type, api_key, Authorization");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
},
success: function (ret) {
end_Arr.push(ret.result.location.lng);
end_Arr.push(ret.result.location.lat);
}
})
).done(function(ret){
_showMap( new BMap.Point(start_Arr[0],start_Arr[1]), new BMap.Point(end_Arr[0],end_Arr[1]));
});
}