ajax进行异步请求,在方法内返回数据无效的问题解决

最近在学习的时候,使用ajax校验用户名是否重复,在前端使用ajax请求进行用户名重复的检查。在success执行的方法内是进行判断,并赋值true和false给定义好的变量flag。在使用alert打印flag的值时都为false。原本代码如下:

                //校验用户名是否重复
		function validate_empName_repeat(){
			var empName=$("#empName_add_input").val();
			var flag=false;
			$.ajax({
				url:"${APP_PATH}/checkEmpName",
				type:"POST",
				data:"empName="+empName,
				success:function(result){
					if(!result.extend.success){
						show_validate_msg("#empName_add_input","failure","已存在名字为 "+empName+" 的用户,请使用其他用户名");
						flag= false;
					}else{
						flag= true;
					}
				}
			});
			return flag;
		}

show_validate_msg方法只是用于显示提示信息。结果如下(很确定了我输入的数据一定是数据库中不存在的):

通过查询资料发现,原来是因为异步请求的原理是,在ajax执行期间,js代码会继续执行直到最终的return语句。并不会等待ajax请求结束后才往下执行。最终return的的flag值为就可能为true,也可能为false。用一句代码测试如下:

alert("校验用户名"+validate_empName_repeat());

 

所以总结下来发现,返回数据和打印数据有时候是不一致的。非常容易对初学者造成困扰。针对这种情况,在ajax请求内加上一句代码,即可保证打印数据和请求数据一一致了。

修改后代码如下:async:false,

                //校验用户名是否重复
		function validate_empName_repeat(){
			var empName=$("#empName_add_input").val();
			var flag=false;
			$.ajax({
				async:false,
				url:"${APP_PATH}/checkEmpName",
				type:"POST",
				data:"empName="+empName,
				success:function(result){
					if(!result.extend.success){
						show_validate_msg("#empName_add_input","failure","已存在名字为 "+empName+" 的用户,请使用其他用户名");
						flag= false;
					}else{
						flag= true;
					}
				}
			});
			alert("校验用户名时打印的数据:"+flag);
			return flag;
		}

再次测试,结果如下:

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值