for循环内执行ajax出现异步加载问题

文章转载自:前端JS中,for循环里面执行ajax,ajax访问不到变量以及每次循环获取不到数据问题解决

我要实现的功能是打印一个审批表,审批表的表头是一样的,但是下面会有至少一个审批人记录
先个大家看一下示例代码

for(var i = 1;i < jsons.length;i++){
	var name = jsons[i].approvalPeople;
	var approvalOpinion  = jsons[i].approvalOpinion;//审批意见
	var approvalTime  = jsons[i].approvalTime;//审批时间
	var names = "";//审批职务
	var img = "";
	// ajax同步执行for循环
	$.ajax({			
		type : 'POST',
		url : '<%=contextPath%>/OrgUitlController/userRole?roleId='+name+'',
		async: false,//设置成同步
		dataType : 'json',
		success : function(result) {
			names = result.name;
			img = result.img;
		}
	});
	//	审批表的体
	//initupdateForBody(employeeDetail,dialog,names||'',jsons[i].approvalOpinion||'',/\d{4}-\d{1,2}-\d{1,2}/g.exec(jsons[i].approvalTime)||'',img||'');
	initupdateForBody(employeeDetail,dialog,names||'',approvalOpinion||'',approvalTime||'',img||'');			            	
}

刚开始的时候,循环执行ajax请求获取不到变量。

问题的所在:for 循环是一个单线程的东西,而ajax是多线程的,之所以称之为异步同步,是因为执行到ajax的时候去后台开启了一个线程,但是for循环本身就是一个单线程的东西,那么执行到ajax的时候,ajax开启了一个线程,for循环是没有等他的,知道for循环结束的时候,才会把ajax返回的数据拿回来,所以会出问题。

解决办法:只需要把ajax改成同步的就可以了,每次for循环,都要去加载ajax方法,并且拿到他返回的数据,只需要在ajax中间加一个代码就可以搞定了。

// ajax同步执行for循环
$.ajax({
	type : 'POST',
	url : '<%=contextPath%>/OrgUitlController/userRole?roleId='+name+'',
	async: false,//加上这一句设置成同步
	dataType : 'json',
	success : function(result) {
		names = result.name;
		img = result.img;
	}
});
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值