for循环中使用ajax

问题:

在写定位的时候遇到了个问题,根据经纬度,反解析出此经纬度对应的位置信息,有n个经纬度,用的是百度的解析api百度api
(因为一开始我用腾讯的定位的api,所以知道了经纬度,然后又搜索到了百度解析的api,就出现了这个问题,饿,为啥不直接用百度api呢,这样不就啥事没有,emmmmm…,陷入沉思)

根据逻辑写:

	var html=""
	var pos=""
	function refresh()   
	{   
	    html="";
		$("#list").html(html)
		getPos() //获取经纬度
	    for(var i=0;i<pos.length;i++){
	    	var time = pos[index].time;
			var posData = pos[index].data;
			var d = eval('('+posData+')');
			html+="<div>"+time+"</div>"
				+"<div>腾讯地图:"+d.nation+" "
				+d.province+" "+d.city+" "+d.district
				+" "+d.addr+"</div>"
			//经纬度信息
			var loc = d.lat+","+d.lng;
			
			console.log(1);
			
		var url="http://api.map.baidu.com/geocoder/v2/callback=renderReverse&location="+loc+"&output=json&pois=1&ak=eoxspRnxjZ9hTsRorgM63SpcM5GSEYKI";
			  
			 $.ajax({
				async:false,
				cache:false,
				type: "GET",
				dataType: "jsonp",
				url: url,
				success: function (json) {
					//由百度api解析完毕,传入数据
			 		 console.log(2)
			 		 
					 if(json.status==0){
						  country = json.result.addressComponent.country==undefined?'':json.result.addressComponent.country;
						   province = json.result.addressComponent.province==undefined?" ":json.result.addressComponent.province;
						   currentCityName = json.result.addressComponent.city==undefined?" ":json.result.addressComponent.city;//取到想要的某个城市
						   district = json.result.addressComponent.district==undefined?" ":json.result.addressComponent.district;
						   town = json.result.addressComponent.town==undefined?" ":json.result.addressComponent.town;
						   street = json.result.addressComponent.street==undefined?" ":json.result.addressComponent.street;
						   street_number = json.result.addressComponent.street_number==undefined?" ":json.result.addressComponent.street_number;
						   addr = json.result.pois.addr==undefined?" ":json.result.pois.add;
						}
					   //html拼接
						html+="<div>百度地图:"+country
							+" "+province+" "+currentCityName
							+" "+district+" "+town+" "+street
							+" "+street_number+" "+addr
							+"</div>"	
						    +"<hr/>";
				   },
				   error:function(){
				   }
			   });
			   console.log(3)
	    }
	    $("#list").html(html)
	    console.log(4)
	}  

发现console.log打印出来是这样的:
这里写图片描述

跟我想要的完全不一样,我逻辑想要的是1231231231234,然而直到最后4打印出来后面才执行了for里面的ajax

解决方式(递归,不知道有没有更好的):
function refresh()   
	{   
	    html="";
		$("#list").html(html)
		getPos()
		index=0;
		//递归
	  	getHtml()
	}  
	
	var index=0;
	//递归
	function getHtml(){
		if(index>=pos.length){
			$("#list").html(html)
			//console.log(4)
			console.log(4)
			return;
		}	
		var time = pos[index].time;
		var posData = pos[index].data;
		var d = eval('('+posData+')');
		html+="<div>"+time+"</div>"
			+"<div>腾讯地图:"+d.nation+" "+d.province
			+" "+d.city+" "+d.district+" "+d.addr+"</div>"
		var loc = d.lat+","+d.lng;
			
			//console.log(1)
			console.log(1)
			
		  var url = "http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location="+loc+"&output=json&pois=1&ak=eoxspRnxjZ9hTsRorgM63SpcM5GSEYKI";
		   $.ajax({
			   async:false,
			   cache:false,
			   type: "GET",
			   dataType: "jsonp",
			   url: url,
			   success: function (json) {
				   //console.log(2)
		 		 	console.log(2)
		 		 	
				   if(json.status==0){
					   country = json.result.addressComponent.country==undefined?'':json.result.addressComponent.country;
					   province = json.result.addressComponent.province==undefined?" ":json.result.addressComponent.province;
					   currentCityName = json.result.addressComponent.city==undefined?" ":json.result.addressComponent.city;//取到想要的某个城市
					   district = json.result.addressComponent.district==undefined?" ":json.result.addressComponent.district;
					   town = json.result.addressComponent.town==undefined?" ":json.result.addressComponent.town;
					   street = json.result.addressComponent.street==undefined?" ":json.result.addressComponent.street;
					   street_number = json.result.addressComponent.street_number==undefined?" ":json.result.addressComponent.street_number;
					   addr = json.result.pois.addr==undefined?" ":json.result.pois.add;
					}
				   
					html+="<div>百度地图:"
						  +country+" "+province+" "+currentCityName+" "+district+" "+town+" "+street+" "+street_number+" "+addr
						  +"</div>"	
					      +"<hr/>";
					index++;
					getHtml();
			   },
			   error:function(){
				   index++;
				   getHtml();
			   }
		   });
	}

这里写图片描述
解决了问题,但感觉有点麻烦,数据一多,要等很久才会有反应

后续:
  1. 数据多了,怎么加快解决方式:(我有两个网页,一个是获取他人位置,简称a,另一个是看到所有人的位置信息,简称b)
    其实很简单,在a读取到一个玩家位置,百度解析,把位置和百度解析数据通过servlet存入数据库,再调用另一个网页b,直接读取数据库所有位置信息就行
  2. 为什么这里async:false,设置为同步,也不对:
    jsonp是跨域处理请求,我理解就是从别的服务器里面拿东西
    然后jsonp官方是不支持同步,官方链接
    这里写图片描述
    翻译:
    这里写图片描述
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值