使用ajax动态加载append添加内容之后,函数外无法获取到内容的原因

在使用Ajax动态加载并append内容到页面后,编辑时发现无法在函数外部获取到下拉框的选中内容。问题在于原始的Ajax请求为异步,导致内容加载完成后未被外部函数捕获。通过将Ajax设置为同步(async: false),则可以在函数外部正确获取并赋值选中选项。

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

 页面点击编辑时,要在弹出的iframe中显示点击取到的值:

 以下拉框为例:

ajax动态加载append内容:

$(function(){
	//显示父类型
	$.ajax({
		 url: 'types/getAllBigType.do',
		 type:'post',
                 async: false,//设置为同步
		 dataType:'json',
		 success:function (r) {
			 var b = r.biglist;
			for (var i = 0; i < b.length; i++) {
			  $("select[name=big_id]").append("<option value="+b[i].big_type+">"+b[i].big_type+"</option>");  
			}
			  
		 },
		 'error':function () {
		 	layer.msg('系统错误',{icon:1,time:1000});
		 }
	});
});

完成加载之后是这个样子的:

 

 但是当我们实现编辑修改时,获取到当前点击的行的内容,赋值给修改页面中的时候,下拉框无法自动选中所属的类型,主要原因是ajax使用了异步,只要改为同步 async: false,//设置为同步,就可以选中属于哪种类型了。


//子类型-编辑
function updateSmall(event){	
	//获取并赋值
	var s_id = $(event).parents().children("td").eq(1).html();//取到id
	var s_type = $(event).parents().children("td").eq(2).html();//取到子类型名称
	var b_type = $(event).parents().children("td").eq(3).html();//取到父类型id
	//弹出一个窗口
	layer.open({
		  type: 2,
		  title: '编辑子类型',
		  area: ['800px', '500px'],
		  content: ["Backstage/type_add.jsp",'no'],
		  success:function(layero, index){
			  //获取弹窗页面的标签对象
              var small_id = $("#small_id", layero.find("iframe")[0].contentWindow.document);
              var small_type = $("#small_type", layero.find("iframe")[0].contentWindow.document);  
              var big_id = $("#big_id", layero.find("iframe")[0].contentWindow.document); 
              var save = $("#saveSubmit", layero.find("iframe")[0].contentWindow.document);
              //给弹出的窗口中的内容赋值
              small_id.attr("value", s_id);
              small_type.attr("value", s_type); 
              //由于ajax是异步的,下拉框不会获取到动态append添加的option和内容,解决方法是把ajax设置为同步的async: false
              //所以下面这段代码才管用,不然取到的只有页面select原始的option的值
              big_id.find('option').each(function(){
            	  //遍历下拉框的子标签
                  if($(this).val() == b_type){
                	  //如果下拉框的子标签的值与从上个页面获取到的值相同,则选中
                      $(this).attr('selected','selected');
                  }else{
                      $(this).attr('selected',false);
                  }
              });
              
            	  return true;
            	  
              });            
		  },
		  end:function(layero, index){
			  //点击关闭按钮就刷新页面
			  layer.close(index);
		  }
	
		}); 
}

 显示为:

 说的可能有点乱,可以去理解ajax的同步和异步的含义,我这些代码说的是我在实现显示下拉框的信息之后,append之后实现编辑修改时函数外面取不到下拉框的内容option,将append所属的ajax改为同步之后,在函数外就可取到它的内容,赋值选中!了~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值