十里桃花不如你 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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog