用ajax做验证用户名是否存在时,因为同步和异步出现的问题

博客介绍了Java中同步和异步交互的区别,同步需等待返回才能发下一个请求,异步则无需等待,项目开发常优先选异步。还给出问题代码,指出因异步请求导致输入用户名时提示信息异常,解决办法是关闭异步请求或把条件语句放ajax方法里。

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

首先百度解释一下同步和异步的区别:

Java中交互方式分为同步和异步两种,异同情况如下:

同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。 区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

问题代码:

var vncode = null;
       $("div[id^='lo']").hide();
       //验证用户名是否存在
       $("#username").blur(function () {
           if (this.value == "") {
        	   $("#lodiv1").html("请输入用户名!");
               $("#lodiv1").show();
               usernameF = false;
           } else {
        	   var uname = this.value;
        	   $.ajax({
        		   //地址
        		   url: "selectusername",
        		   //方式
        		   type: "post",
        		   //传递的参数
        		   data: {"uname":uname},
        		   //返回结果
        		   success: function(result) {
        		    console.log( typeof result);
        		   vncode =result;
        		   
    			}
        	   })
        	   if(vncode=='102'){
    			   alert("1")
            	   $("#lodiv1").html("用户名已存在!");
                   $("#lodiv1").show();
                   usernameF = false;
               }else{
            	   alert("0")
            	   $("#lodiv1").hide();
            	   usernameF = true;
               }
           }
           
       })

后台代码:

request.setCharacterEncoding("utf-8");
		String uname = request.getParameter("uname");
		
		SelectUserNameService suns = new SelectUserNameService();
		User user = new User();
		user = suns.selectUserName(uname);
		int vncode;
		if(user!=null) {
			vncode = 102;
			response.getWriter().print(vncode);
			response.flushBuffer();
		}else {
			vncode = 101;
			response.getWriter().print(vncode);
		}
	}

运行出现问题:

输入已存在用户名:

结果看是没问题,输入不存在用户名: 

 

却依旧提示错误信息,然后再次输入存在的用户

 

这回提示错误信息却隐藏了。

而这就是因为异步请求的问题,所以在我们把异步请求关了就可以了,

 $.ajax({
        		   //关掉异步请求
        		   async:false,
        		   //地址
        		   url: "selectusername",
        		   //方式
        		   type: "post",
        		   //传递的参数
        		   data: {"uname":uname},
        		   //返回结果
        		   success: function(result) {
        			   console.log( typeof result);
        		   vncode =result;
        		   
    			}
        	   })

或者把条件语句放在ajax方法里面:

//验证用户名是否存在
       $("#username").blur(function () {
           if (this.value == "") {
        	   $("#lodiv1").html("请输入用户名!");
               $("#lodiv1").show();
               usernameF = false;
           } else {
        	   var uname = this.value;
        	   $.ajax({
//        		   //关掉异步请求
//        		   async:false,
        		   //地址
        		   url: "selectusername",
        		   //方式
        		   type: "post",
        		   //传递的参数
        		   data: {"uname":uname},
        		   //返回结果
        		   success: function(result) {
        			   console.log( typeof result);
        		   vncode =result;
        		   if(vncode=='102'){
        			   alert("1")
                	   $("#lodiv1").html("用户名已存在!");
                       $("#lodiv1").show();
                       usernameF = false;
                   }else{
                	   alert("0")
                	   $("#lodiv1").hide();
                	   usernameF = true;
                   }
    			}
        	   })
        	   
           }
           
       })

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值