初学者使用json+ajax作注册判断的时候容易犯的一个错误

平常越不留意的东西越容易犯错,前些天在做注册案例的时候,用到了json+ajax来发送异步请求来判断当前的用户有没有被注册过,然后在注册按钮进行终极校验决定是否进行注册的时候,遇到了一个bug困扰了很久,后来经过自己的不断的调试和百度解决了,在此我将遇到的问题使用伪代码跟大家分享一下,让大家遇到我这个坑的时候轻松越过.

(以下是错误案例)

1 我在注册页面中register.html中用户输入框失去焦点的时候发送异步请求,判断当前用户有没有被注册过,结果返回显示在页面提示用户.异步请求的函数如下所示:

 1 function checkUsername() {
 2 $.post("user","action=checkusername&username="+$("#username").val(),function (result) {
 3 var flag = result.data;
 4 if(!flag){
 5 //用户名已经被重复注册了
 6 $("#errors").html("该用户名不可用")
 7     return false;
 8 }else{
 9 $("#errors").html("");
10     return true;
11 }
12 } ,"json");
13 }

  2 我在注册按钮上绑定点击事件,再次验证用户名是否可用,根据判断决定是否进行注册

 1 function register() {
 2 if(checkUsername()){   //再次发送异步请求
 3 $.post("user","action=register&username="+$("#username").val()+"&password="+$("#pwd").val(),function (result) {
 4 var flag = result.data;
 5 if(flag){
 6 location.href = "login.html";
 7 }else {
 8 alert("注册失败");
 9 }
10 },"json");
11 }else {
12 alert("注册失败");
13 }
14 }

总结,以上的错误代码的原因checkUsername()的返回值是undefined,原因是异步请求不会等到它的function函数执行完才退出,所以在没有得到返回值的时候,函数已经结束了,所以无论用户名是否被通过校验都会进行注册

解决办法有两种:

1 将异步请求更改为同步请求;   (现在主流的都是前后端分离,所以建议使用异步请求)

2 抽取一个全局保存异步请求的返回值即可

以下是我调试成功的代码:

1 我在注册页面中register.html中用户输入框失去焦点的时候发送异步请求,判断当前用户有没有被注册过,结果返回显示在页面提示用户.异步请求的函数如下所示:

 1 var res_username = false; //使用全局变量保存返回的值,一开始默认为false
 2 function checkUsername() {
 3 $.post("user","action=checkusername&username="+$("#username").val(),function (result) {
 4 var flag = result.data;
 5 if(!flag){
 6 //用户名已经被重复注册了
 7 $("#errors").html("该用户名不可用")
 8 res_username= false;
 9 }else{
10 $("#errors").html("");
11 res_username= true;
12 }
13 } ,"json");
14 }

  2 我在注册按钮上绑定点击事件,再次验证用户名是否可用,根据判断决定是否进行注册

 1 function register() {
 2 if(res_username){
 3 $.post("user","action=register&username="+$("#username").val()+"&password="+$("#pwd").val(),function (result) {
 4 var flag = result.data;
 5 if(flag){
 6 location.href = "login.html";
 7 }else {
 8 alert("注册失败");
 9 }
10 },"json");
11 }else {
12 alert("注册失败");
13 }
14 }

原文地址:https://www.cnblogs.com/songyoulian/p/10055793.html

时间: 2024-08-03 09:19:49

初学者使用json+ajax作注册判断的时候容易犯的一个错误的相关文章

Ajax概述和判断用户名是否存在的简单代码练习

在本代码中主要体现,Ajax实现了部分位置的刷新.不需要重新刷新网页,重新请求服务器.下面用过代码来对Ajax更深的认识 这里需要创建,一个jsp文件(显示登录界面),js文件(对Ajax的主要设置),一个servlet(主要用作和数据库连接和逻辑的控制) 1.在web中创建一个Lession7jsp页面,jsp中主要写了登录页面的用户名和密码和按钮 <%@ page contentType="text/html;charset=UTF-8" language="jav

js方法内Ajax请求数据判断,验证无效(OnClientClick=&quot;return Method();&quot;),还是直接执行后台代码

function CheckAdd() { var flag = true; $.ajax({ cache: false, async: false, url: "/ajaxpage/getajax.aspx?t=adjserviceclientlist&Cellphone=" + Cellphone + "&a=" + Math.random(), dataType: 'json', success: function (data) { if (d

Java用正则表达式写简单账号密码注册判断

Java写简单账号密码注册判断 菜鸟刚学的表达式 练手代码. 1 /*在注册时通常要验证用户名和密码是否合法,运用学习过的知识完成如下操作: 2 3 用户名长度大于等于6位,必须包含数字和英文字母 4 5 密码长度大于等于8位,必须包含特殊符合_或者$,英文字母以及数字 6 7 以上两个条件同时成立注册才能成功. 8 9 10 11 * */ 12 13 import java.util.Scanner; 14 15 import java.util.regex.Matcher; 16 17 i

struts2,json,ajax整合内容记录

使用ssh三大框架整合时关于struts2,json,ajax整合内容记录.这里写主要部分代码 action部分: 注意事项,action部分的返回值要有set和get方法,否则会报错. package com.hcj.action; import net.sf.json.JSONObject; import com.hcj.dto.User; import com.hcj.service.UserService; import com.opensymphony.xwork2.ActionSup

【铜】第134篇 一对一视频录制及Ajax实现注册周日

关键词:一对一视频录制, Ajax实现注册 一.一对一视频录制 1.1 需要做的 二.network 2.1 Ajax实现注册,如下: 1)注册html <h3>注册请填写:</h3> 用户名:<input type="text"   placeholder="请输入用户名" id="username1" name="username" ><br> 昵   称:<input

java痛苦学习之路[十二]JSON+ajax+Servlet JSON数据转换和传递

1.首先客户端需要引入 jquery-1.11.1.js 2.其次javaweb工程里面需要引入jar包  [commons-beanutils-1.8.0.jar.commons-collections-3.1.jar.commons-lang-2.4.jar.commons-logging-1.1.3.jar.ezmorph-1.0.6.jar.json-lib-2.3-jdk15.jar] 3.客户端js端代码 4.servlet 服务器,映射的路径CardColl 以上就是整个过程,如果

jquery json ajax三级联动

province_city_area.jsp 1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <script type="text/javascript"

[转]如和判断你的领导是否是一个值得你追随的领导.

跟对一个领导,对于你的一生来说,应该是一个巨大的财富.那么如何来判断你的领导是否是一个值得你追随的领导呢? 1. 你的领导总是传递给你负面的消息每周一例会,你都会从你的领导那听到坏消息.公司对你们的部门不满了,他对项目进展不满了,手下人如何不努力了,等等,他从不关注团队的成就,他只关心他自己在大领导眼中的形象. 2. 你没有得到过他的鼓励他经常批评你,但一个好的领导者应该鼓励追随他的人. 如果你觉得你工作已经很尽力了,但最终还是得不到鼓励,你一定是在为一个错误的领导工作. 3. 你的领导从不对你

判断股票强弱最有效的一个方法

简单地说, (1)大盘指数涨的时候,该股票涨得比大盘指数大,当大盘指数调整时,该股票指数调整得很少 . (2)大盘指数一波一波下跌,但是该股票却跌不下去,没有跟谁指数下跌,往往这种时候,当大盘涨一点点的时候,该股票就会大涨. (3)大盘连续大涨,而该股票却一直下跌,这种股票一定要及时清理,比如最近的600077宋都股份,大盘涨了6个多点,它还跌了6个多点.这种股票千万要不得. 判断股票强弱最有效的一个方法