问题背景:
百度地图API有些接口限制并发请求的数量,虽然标记每分钟多少条,但是使用for循环发送时,即使最大数量小于限制,仍会返回超过限制的错误。
解决办法:
在for循环中使用setTimeout函数,以i*x为延时,向API发送请求,x为该API执行的大概速度,从F12中可以查看。
注意事项:
setTimeout需传参数,使用封装函数,防止只执行最后一个参数。
示例代码:
function gpsUpdataBdPoint(){
$.ajax({
url:"test_gps/getAlltest_gps",
type:'post',
dataType:'json',
async:false,
success:function(data){
for(var i=0,size_i=data.length;i<size_i;i++){
var id = data[i].id;
var coords = data[i].wgsLng+","+data[i].wgsLat;
var url = "http://api.map.baidu.com/geoconv/v1/?coords="+coords + "&from=1&to=5&ak=xxx";
setF(id,url,i);
}
console.log("send done")
}
})
}
function setF(id,url,i){
setTimeout(function(){updataTest_gps(id,url);},i*20);
}
var doneFlag = 1;
function updataTest_gps(id,url){
var date = new Date();
console.log(date)
$.ajax({
url:url,
dataType:"jsonp",
async:false,
success:function(data){
var lng = data.result[0].x;
var lat = data.result[0].y;
$.ajax({
url:"test_gps/updateByPrimaryKeySelective",
data:{
bdLng:lng,
bdLat:lat,
id:id
},
type:"post",
success:function(data){
console.log(doneFlag);
doneFlag++;
}
})
}
})
}