前端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;
	}
});

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叁金Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值