for循环里嵌套使用ajax遇到的问题

本文介绍了一个使用jQuery插件ZTree实现的树形结构中如何通过同步Ajax请求动态加载子节点的方法。为了解决因异步请求导致的数据加载不同步问题,作者采用将Ajax设置为同步的方式,在循环中逐个加载子节点,确保了数据的一致性和完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  var fag = false;var array = new Array();
	function onClick(event, treeId, node) {
		
		var treeObj = $.fn.zTree.getZTreeObj("tree")
		var nodes = treeObj.getNodes();
		
		if(fag == false){
		  for(var m = 0 ; m < nodes.length;m++){
		      array[m]=nodes[m].name;
		  }
		  fag = true;
		}
		 for(var h = 0 ; h < array.length; h++ ){ 
		
		     if(array[h]==node.name){
		       $.ajax({
				    type: "GET",
				    async: false,
				    url: "$link.getContextURL()/managerTest/listChildNodes?managerID="+node.id,
				    data:"",
				    success:function(data){
					 zNodes=new Array(data.length);
                       for(var i=0;i<data.length;i++){
                           zNodes[i]={ id:data[i].memberid, pId:node.id, name:data[i].membername};
                       }
					 var newNode = treeObj.addNodes(node, zNodes);
					 var a= array.splice(h,1);
					 
					// window.top.$.XYTipsWindow.removeBox();
				}
				});
		    }
		 }
		}
这是正确的代码。ajax里必须加上async:false这句,不然的话,for循环的时间很短,而ajax会返回后台去执行操作,for循环都执行完了,ajax一遍还没出来返回页面,造成h的值很诡异。所以这两个一起使用的时候就不能异步传输,得使用同步!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值