美文网首页程序员
表单提交前验证短信验证码是否正确

表单提交前验证短信验证码是否正确

作者: 鑫鑫哥哥丨 | 来源:发表于2018-03-28 23:50 被阅读0次

自己做的一个用户注册的表单,注册需要验证手机号,会发送短信验证码,所以在用户填写完验证码之后点击注册,再提交表单之前先请求后台验证一下短信验证码是否正确,错误会有提示,正确就会提交表单注册.

前端使用thymeleaf模板,semantic UI框架,后台是spring boot

先看注册的form

<form class="ui form attached fluid segment" name="enrollInfo" id="enroll" th:action="@{/enroll}" method="post" th:onsubmit="'return validateMsgCode();'">
            <div class="ui error message">
                <div class="header" id="error">请求正确填写注册信息哦!</div>
            </div>
            <div class="field">
                <div class="ui left icon input">
                    <i class="user icon"></i>
                    <input type="text" name="username" placeholder="独一无二的用户名">
                </div>
            </div>
            <div class="field">
                <div class="ui left icon input">
                    <i class="mobile alternate icon"></i>
                    <input type="text" name="telPhone" placeholder="手机号">
                </div>
            </div>
            <div class="field">
                <div class="ui left icon input">
                    <i class="envelope square icon"></i>
                    <input type="text" name="msgCode" placeholder="短信验证码">
                    <button class="ui positive button msg" type="button" th:onclick="'getMsgNum(this)'">发送验证码</button>
                </div>
            </div>
            <div class="field">
                <div class="ui left icon input">
                    <i class="shield alternate icon"></i>
                    <input type="password" name="password" placeholder="6-16位的密码,可由数字、字符、字母组成">
                </div>
            </div>
            <button class="fluid teal ui button" type="submit">注册</button>
        </form>

这里采用的方法是在form标签中使用onsubmit,thymeleaf的写法是th:onsubmit="'return 执行函数()'",我js中的实现看下面代码

function validateMsgCode() {
    var result = false;
    var data = {
        telPhone: $("input[name='telPhone']").val(),
        msgCode: $("input[name='msgCode']").val()
    };
    syncAjaxData("POST", "/validateMsgCode", JSON.stringify(data), function (response) {
        console.log("result=" + response);
        if (response) {
            result = true;
        }else {
            console.log("验证码错误");
            $('.ui.form').form('add prompt', "msgCode", "验证码错误或超时");
        }
    });
    return result;
}

重点就在这里了

这里Ajax请求的后台就是一个短信的验证没什么可说的,Ajax是我封装了以下的,里面有一句重要的代码async: false,,就是要将Ajax设为同步的,这样才可以改变result的值,否则Ajax会新开一个异步线程去执行,这样影响不到函数里的变量,验证就没有作用了,
但我这里同步Ajax出现了一个新问题,就是如果验证错误,我会通过semantic中表单验证的方法给指定字段添加错误提示(具体使用方法可以参考官方文档),$('.ui.form').form('add prompt', "msgCode", "验证码错误或超时");,但我在测试中发现这个验证总是闪一下就没了,到现在不明白为什么,
就是下面这个样子,手速快,在它要没了的时候我给截了下来,

注册界面
这样确实是进行字段的验证,验证错误不会提交,正确就会提交注册,但闪一下就没了,这样肯定也是不行,
最后发现主要是onsubmit方法的原因,如果我使用异步Ajax,在一个异步的线程中执行,相当于跳出方法外执行就没有问题,但异步的做不到字段的验证,陷入了纠结中,表单验证和错误提示二者选一个,要么同步Ajax放弃错误提示,要么异步Ajax放弃验证,后者肯定是不行的,但前者的用户体验也会不好,最后想到的办法是二者我都要了,
具体实现就是写在onSubmit方法中写两个Ajax,一个异步一个同步,异步的用来做错误提示,同步用来做字段验证,修改后的js代码就是这样了
function validateMsgCode() {
    var result = false;
    var data = {
        telPhone: $("input[name='telPhone']").val(),
        msgCode: $("input[name='msgCode']").val()
    };
    ajaxData("POST", "/validateMsgCode", JSON.stringify(data), function (response) {
        console.log("result=" + response);
        if (!response) {
            console.log("验证码错误");
            $('.ui.form').form('add prompt', "msgCode", "验证码错误或超时");
        }
    });
    syncAjaxData("POST", "/validateMsgCode", JSON.stringify(data), function (response) {
        console.log("result=" + response);
        if (response) {
            result = true;
        }
    });
    return result;
}

先用一个异步的Ajax来做验证错误提示,再用一个同步的Ajax做字段验证,这样可以做到错误提示,并且起到表单验证的作用,缺陷就是多了一次重复的请求,但为了实现效果,多一次请求没有太大影响吧.

相关文章

  • 表单提交前验证短信验证码是否正确

    自己做的一个用户注册的表单,注册需要验证手机号,会发送短信验证码,所以在用户填写完验证码之后点击注册,再提交表单之...

  • 三、Spring Security表单验证码

    表单验证码登录 表单登录验证码验证,一般在用户名、密码提交登录前,添加过滤器,先验证验证码的有效性(开发中一般用的...

  • 手机验证码

    本人所用短信验证码为容联云通讯 发送手机验证码 验证短信验证码是否有效 验证验证码时间是否过期

  • PHP之验证码制作

    php实现字母验证码 php通过session存储验证信息 验证码通过表单提交、校验 使用js实现动态校验验证码

  • 短信验证模拟登录饿了么

    观察登录流程 无图形验证码的情况 输入手机号 点击发送短信验证码 提交短信验证码 有图形验证码的情况 输入手机号 ...

  • Django相关技术点文档

    Django总结 发送短信: 检查确认图片验证码 检查60s内是否发送过 否生成短信验证码 保存短信验证码以及发送...

  • PHP 短信验证码

    业务操作流程:输入手机号,发送验证码,收到验证码填写提交验证。常用于短信登录和手机号注册账号。 一、购买短信验证码...

  • Laravel后端接口使用mews/captcha验证码注册+登

    大致的流程讲解:注册流程:获取图形验证码并正确填写->请求注册验证短信->填写注册的用户信息+短信验证码->用户注...

  • 表单中含有AJAX验证问题的异步解决方案

    表单中含有AJAX验证问题的异步解决方案 功能:验证码正确与否以及验证码不正确无法submit HTML代码 Ja...

  • 验证验证码是否正确

    /** * 验证验证码是否正确 * @param string $code 用户验证码 * @param stri...

网友评论

    本文标题:表单提交前验证短信验证码是否正确

    本文链接:https://www.haomeiwen.com/subject/xwdpcftx.html