问题描述:需要批量访问百度地图API获取地址对应的经纬度。原代码如下图,因为for循环会在主线程执行完,而ajax请求作为异步任务不会进入主线程而会进入任务队列,在主线程执行完后再执行任务队列,所以每次ajax执行的时候参数都是最后一条数据。
var data=[
{id:'1',address:'上海市南汇区泥城镇海关村957号'},
{id:'2',address:'上海市浦东新区周浦镇瑞和路350弄17号101室'},
];
var address,id;
for (var i = 0; i < data.length; i++) {
var id=data[i].id;
var address=data[i].address;
var longitude=0;
var latitude=0;
$.ajax({
type:"GET",
url:"http://api.map.baidu.com/geocoder/v2/?address="+address+"&output=json&ak=xxxx",
dataType:"JSONP",
data:{id:id},
success:function(json1){
if(json1.status==0)
{
longitude= json1.result.location.lng.toFixed(6)
latitude= json1.result.location.lat.toFixed(6)
}
},
error:function(XMLHttpRequest,textStatus,errorThrown)
{
}
});
}
解决方案一
// var id=data[i].id;
// var address=data[i].address;
let id=data[i].id;
let address=data[i].address;
解决方法二:
(function(i){
$.ajax({
})
})(i)