级联城市因为ajax的异步请求导致的问题

   无限极城市级联菜单 在进行ajax的异步通信的时候 ,默认加载页面就执行方法,偶尔就会出现 页面的请求有返回值但是不能加载到DOM中去的问题,在考虑过缓存问题,尝试过加参数随机数,以及使用setInterval 和 setTimeout 仍然不凑效的情况下 通过仔细分析它的ajax通信原理终于揭开谜底

   出现这个问题的主要原因就是 是用jquery的异步请求的时候,页面返回值返回过来,还没有执行返回方法,就已经往下执行了,所以应该讲异步请求改为同步请求

$.ajaxSettings.async = false;

// JavaScript Document
// 城市联动
function areaAjaxReturn(check,ajaxUrl){ 
          $.ajaxSettings.async = false;//处理同步请求
	  //判断有几级 城市联动菜单 
	  $.getJSON(ajaxUrl+'/shop/add/',{'type':'jibie','t':new Date().getTime()},function(data){
	   var span = '';
	   if(data.data!= ''){
		   for(var i=0;i<2;i++){
			   span += '<span class="span span'+(i+1)+'"></span>'; 
			   }  
	       $('.area').after(span); 
		 }
	   })
		function changes(num,area,vals){ 
		$('.span').each(function(index, element) {
				if(index+1>num){ 
					$(this).html('');
				}
			});
		$.getJSON(ajaxUrl+'/type/ajax',{'pid':$('.'+area).val(),'t':new Date().getTime()},function(data){ 
		 var html = ''; 
		 if(data.data!=null){ 
			  html  = '<select class="aress area'+num+'">';
			  html += '<option value="-1">请选择</option>';  
			  $.each(data.data,function(index,val){ 
				  html += '<option value="'+val.area_code+'">'+val.area_name+'</option>';  
				 })
			  html += '</select>'; 
			 } 
			 $('.span'+num).html(html);
			 $('.area'+num).change(function(){
				 var valsz = vals;
				 if($(this).val() != '-1'){ 
				  valsz = vals+$(this).val()+',';
				 } 
				$('input[name=area]').val(valsz);
				$('input[name=area_code]').val(valsz); 
				changes(num+1,'area'+num,valsz); 
			 })
		 })   
	   }
	 $('.area').change(function(){  
		 var vals = ','+$(this).val()+',';
		 $('input[name=area]').val(vals);
		 $('input[name=area_code]').val(vals);
		  changes(1,'area',vals);  
	  })  
	  if(check){
		  $('.area').change();
	  }    
}


使用该方法引用

areaAjaxReturn(true,'__SELF__');

在执行异步请求的时候 会偶尔出现这种情况


在变成同步请求之后就不会出现这种问题,下面是正常显示的结果



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值