因为百度的JS API是异步的,批量查询的时候会乱掉,就把每次请求变成同步的,等请求返回了之后才进行下一个地址的查询。 设置一个全局flag来标识当前请求是否正常响应,并且不断的检查这个flag,如果正常响应,才进行下一次的请求,这样就不容易乱掉
引入JS
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2&ak=你的AK"></script>
HTML
1地址:<textarea rows="10" cols="" id="address" style="width: 40%"></textarea> 2坐标结果: 3<textarea rows="10" cols="" id="resultText1" style="width: 20%"></textarea> 4<textarea rows="10" cols="" id="resultText2" style="width: 20%"></textarea><br> 5<input type="button" value="测试分批执行" onclick="batchQuery();">
JS
1var jsonResult = [];//查询结果 2var jsonIndex = 0; 3var intervalId = -1;//重复调用的ID 4var lastIndex = -1; 5 6//测试分批执行 7function batchQuery() { 8 filteAddress(); 9 var address = document.getElementById("address").value; 10 document.getElementById("resultText1").value = ""; 11 document.getElementById("resultText2").value = ""; 12 13 var addArray = address.split("\n"); 14 for (var index in addArray) {//初始化组装JSON 15 var regAndAddArray = addArray[index]; 16 var row = {add: regAndAddArray, lng: "", lat: "", responseFlag: false}; 17 jsonResult.push(row); 18 } 19 //反复查询 20 intervalId = setInterval("startSetInterval()", 10); 21} 22 23//开始计数 24function startSetInterval() { 25 console.log("定时查询了" + jsonIndex); 26 if (lastIndex != jsonIndex) { 27 console.log("查询第" + jsonIndex + "个"); 28 lastIndex = jsonIndex; 29 var regAndAddArray = jsonResult[jsonIndex].add.split(","); 30 var local = new BMap.LocalSearch(regAndAddArray[1], { 31 onSearchComplete: function (results) { 32 if (results && results._pois) { 33 if (results._pois.length > 0) { 34 var firstResult = results._pois[0];//第一个结果 35 jsonResult[jsonIndex].lng = (firstResult.point.lng); 36 jsonResult[jsonIndex].lat = (firstResult.point.lat); 37 } else { 38 39 } 40 } 41 console.log("第" + jsonIndex + "个已经响应完成,准备查询下一个"); 42 jsonResult[jsonIndex].responseFlag = true; 43 jsonIndex++;//查询下一个地址 44 45 46 if (jsonIndex == jsonResult.length) {//等到所有回调执行完之后,把结果放进去 47 console.log(jsonResult); 48 var html = ""; 49 var htmlLat = ""; 50 for (var res in jsonResult) { 51 html += (jsonResult[res].lng + "\n"); 52 htmlLat += (jsonResult[res].lat + "\n"); 53 } 54 document.getElementById("resultText1").value = html; 55 document.getElementById("resultText2").value = htmlLat; 56 clearInterval(intervalId);//停止Interval 57 console.log("查询结束"); 58 } 59 } 60 }); 61 local.search(regAndAddArray[2]); 62 console.log("第" + jsonIndex + "个已经请求已经发送,正在等待"); 63 } 64 65}