十里桃花不如你 2016-11-21 15:42 采纳率: 0%
浏览 1000

当项目第一次启动时,注册页面ajax校验结果未返回,表单就提交了

简易表单:

<form action="${pageContext.request.contextPath }/user_regist" onsubmit="return checkForm()" method=post>
登录名:<input type="text" name="user_code" onblur="checkCode()"><span  id="codeSpan" ></span><br>

<input type="submit" value="submit"><br>
</form>



// 判断登录名是否为空,或者是否已经存在
function checkCode(){
    //注册文本框的值
    var code = $("#user_code").val();
    if(code.trim() == ""){
        // 给span标签动态添加class的类
        $("#codeSpan").addClass("error").html("登录名不能为空");
    }else{
        // 登录名不为空,发生ajax的请求
        var url = "${pageContext.request.contextPath}/user_findByCode";
        var param = {"user_code":code}; 
        $.post(url,param,function(data){
            if(data && data == "no"){
                // 说明,登录名已经存在了,给出提示
                $("#codeSpan").addClass("error").html("登录名已经存在");
            }else{
                // 登录名可以注册
                $("#codeSpan").removeClass("error").html("可以注册");
            }
        });
    }
}

// 如果该方法返回false,表单不提交
function checkForm(){
    checkCode();
    // 有标签属性为 class="error",则阻止表单提交
    if($(".error").size() == 0){
        return true;        
    }else{
        return false;
    }
}

问题描述:
项目首次启动时,在注册页面输入已存在用户名,直接点击提交按钮,此时异步校验用户名是否存在,操作span标签class属性;但是ajax回调函数未完成之前,表单信息已经提交,数据库存入重复用户。

虽然异步请求造成的bug已经通过同步锁解决了,但是我还有一个困惑!
困惑:
为什么上述bug只有项目启动后的首次访问会出现,之后再注册就可以正常的完成校验?

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-11-21 15:55
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器