因为百度的JS API是异步的,批量查询的时候会乱掉,就把每次请求变成同步的,等请求返回了之后才进行下一个地址的查询。 设置一个全局flag来标识当前请求是否正常响应,并且不断的检查这个flag,如果正常响应,才进行下一次的请求,这样就不容易乱掉
引入JS
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2&ak=你的AK"></script>
HTML
地址:<textarea rows="10" cols="" id="address" style="width: 40%"></textarea>
坐标结果:
<textarea rows="10" cols="" id="resultText1" style="width: 20%"></textarea>
<textarea rows="10" cols="" id="resultText2" style="width: 20%"></textarea><br>
<input type="button" value="测试分批执行" onclick="batchQuery();">
JS
var jsonResult = [];//查询结果
var jsonIndex = 0;
var intervalId = -1;//重复调用的ID
var lastIndex = -1;
//测试分批执行
function batchQuery() {
filteAddress();
var address = document.getElementById("address").value;
document.getElementById("resultText1").value = "";
document.getElementById("resultText2").value = "";
var addArray = address.split("\n");
for (var index in addArray) {//初始化组装JSON
var regAndAddArray = addArray[index];
var row = {add: regAndAddArray, lng: "", lat: "", responseFlag: false};
jsonResult.push(row);
}
//反复查询
intervalId = setInterval("startSetInterval()", 10);
}
//开始计数
function startSetInterval() {
console.log("定时查询了" + jsonIndex);
if (lastIndex != jsonIndex) {
console.log("查询第" + jsonIndex + "个");
lastIndex = jsonIndex;
var regAndAddArray = jsonResult[jsonIndex].add.split(",");
var local = new BMap.LocalSearch(regAndAddArray[1], {
onSearchComplete: function (results) {
if (results && results._pois) {
if (results._pois.length > 0) {
var firstResult = results._pois[0];//第一个结果
jsonResult[jsonIndex].lng = (firstResult.point.lng);
jsonResult[jsonIndex].lat = (firstResult.point.lat);
} else {
}
}
console.log("第" + jsonIndex + "个已经响应完成,准备查询下一个");
jsonResult[jsonIndex].responseFlag = true;
jsonIndex++;//查询下一个地址
if (jsonIndex == jsonResult.length) {//等到所有回调执行完之后,把结果放进去
console.log(jsonResult);
var html = "";
var htmlLat = "";
for (var res in jsonResult) {
html += (jsonResult[res].lng + "\n");
htmlLat += (jsonResult[res].lat + "\n");
}
document.getElementById("resultText1").value = html;
document.getElementById("resultText2").value = htmlLat;
clearInterval(intervalId);//停止Interval
console.log("查询结束");
}
}
});
local.search(regAndAddArray[2]);
console.log("第" + jsonIndex + "个已经请求已经发送,正在等待");
}
}