JS实现注册登录发送短信验证码动态显示60S倒计时完整案例

2023-10-27

通常在web项目中都会遇到账户注册或者忘记密码时需要发送短信验证码的功能,虽然说这种功能很常见,但是实际开发过程中很多人还会遇到不少坑。笔者经过整理把最近项目中的用到的这个发送短信验证码动态显示60S倒计时的完整实现过程分享给广大开发者朋友。

1、页面发送短信验证码的表单

<div class="form-group">
    <div class="col-xs-6 col-sm-7 col-md-7 col-lg-7" >
       <input type="text"  id="userPhone" class="form-control" placeholder="请输入手机号码">
    </div>
    <div class="col-xs-6 col-sm-5 col-md-5 col-lg-5" style="justify-content:flex-end;display: flex;">
       <button type="button" class="btn btn-info"  id="second">点击获取验证码</button>
    </div>
</div>
<div class="form-group">
    <input type="text" name="securityCode" class="form-control"  placeholder="请输入验证码">
</div>

2、发送短信验证码的JS处理逻辑

<script type="text/javascript">
        $("#second").click(function (){
            sendyzm($("#second"));
        });
        //用ajax提交到后台的发送短信接口
        function sendyzm(obj){
            var phone = $("#userPhone").val();
            var result = isPhoneNum();
            if(result) {
                $.ajax({
                    url:"http://localhost:8085/my/sendYzm",
                    data:{phone:phone},
                    dataType:"json",
                    type:"post",
                    async : false,
                    cache : false,
                    success:function(res){
                        debugger;
                        if(res){
                            alert("验证码发送成功");
                        }else{

                        }
                    },
                    error:function(){
                        alert("验证码发送失败");
                    }
                })
                setTime(obj);//开始倒计时
            }
        }

        //60s倒计时实现逻辑
        var countdown = 60;
        function setTime(obj) {
            if (countdown == 0) {
                obj.prop('disabled', false);
                obj.text("点击获取验证码");
                countdown = 60;//60秒过后button上的文字初始化,计时器初始化;
                return;
            } else {
                obj.prop('disabled', true);
                obj.text("("+countdown+"s)后重新发送") ;
                countdown--;
            }
            setTimeout(function() { setTime(obj) },1000) //每1000毫秒执行一次
        }


        //校验手机号是否合法
        function isPhoneNum(){
            var phonenum = $("#userPhone").val();
            var reg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
            if(!reg.test(phonenum)){
                alert('请输入有效的手机号码!');
                return false;
            }else{
                return true;
            }
        }
    </script>

3、后台发送短信验证码接口(调用第三方短信服务商的发短信接口,各个服务商的发短信接口大同小异)

    @RequestMapping(value = "/sendYzm", method= RequestMethod.POST)
    @ResponseBody
    public Boolean sendYzm(String phone,HttpServletResponse res) {
        Boolean  flag = true;
        if (!DXUtil.isPhone(phone)) {
            flag = false;

        } else {
            String code = (System.currentTimeMillis() + "").substring(7);
            menuCache = CacheManager.getInstance().getCache("codeCache");
            menuCache.put(new Element(phone,code));
            DXUtil.getRequest2(phone, code);
        }
        res.setHeader("Access-Control-Allow-Origin", "*");
        return flag;
    }

这里用到了ehcache,根据时间戳生成随机验证码,然后把验证码放进缓存,当页面提交表单时,表单提交过来的验证码和从缓存里取到的验证码进行对比验证。需要注意的一句代码:res.setHeader("Access-Control-Allow-Origin", "*");加上这句代码是为了解决跨域问题

如果不加这句代码,浏览器页面的js会报下面这个错误提示

No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是由于当使用ajax访问远程服务器时,会涉及到跨域问题,导致请求失败。这是出于安全的考虑,默认禁止跨域访问导致的。

常用的解决方案有两种,可以分为客户端解决方案和服务器端解决方案。这里讲一下服务端解决方案:

在服务端的filter或者servlet里面添加 
response.setHeader("Access-Control-Allow-Origin", "*"); 
“Access-Control-Allow-Origin”表示允许跨域访问,“*”表示允许所有来源进行跨域访问,这里也可以替换为特定的域名或ip

最终界面效果如下:

点击前:点击后倒计时:

以上代码就是动态发送短信验证码后60秒倒计时功能的完整实现过程,欢迎各位朋友一起交流。笔者电话(微信18629374628)

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS实现注册登录发送短信验证码动态显示60S倒计时完整案例 的相关文章

  • MongoDB数据库

    介绍 1 MongoDB是非关系型文档型数据库 开源 高性能 高可用 高扩展 2 数据存储层级 文档 对应行 gt 集合 对应表 gt 数据库 3 关系型数据库中的一行对应MongoDB数据库中的一个文档 4 存储数据格式是BSON格式 相

随机推荐

  • VTK

    https blog csdn net www doling net article details 8763686
  • 毕业设计基于安卓的校园拍卖系统(附下载链接)

    基于安卓的校园拍卖系统 含导出APP 点我下载源码资源 介绍 基于安卓的校园拍卖系统 使用IDEA开发 SQLite作为数据库 支付宝沙盒作为支付工具 系统具有用户登录注册 管理员登录 发布商品 商品竞价 商品审核 支付尾款等功能 使用说明
  • Spring-IOC

    IOC相关 一 Ioc Inversion of Control 控制反转 传统的对象引用是采用 new 对象 的形式 例如 Book book new Book 每次引用都需要重新创建 耦合性高 控制反转则是由主动创建转换为外部 IOC容
  • 深度之眼(七)——矩阵的初等变换

  • Windows进程状态API之Ps API

    windows的进程状态信息函数主要分为两类 一类是PS PROCESS STATUS HELPER API 另外一类是Th TOOL HELP API 本文介绍PS API Ps API 函数列表及其功能说明 使用Ps API需要包含ps
  • JS实现给json数组动态赋值的方法及实用在线工具

    Json 数组也是数组 1 var jsonstr name a value 1 name b value 2 var jsonarray eval jsonstr var arr name names val value values v
  • 左手坐标系与右手坐标系(转)

    转自 http www cnblogs com mythou p 3327046 html 1 空间直角坐标系 下面摘录一段百科的解析 这些都是数学基础 过空间定点O作三条互相垂直的数轴 它们都以O为原点 具有相同的单位长度 这三条数轴分别
  • electron-builder 打包 exe 异常错误集锦

    项目背景 公司内部一个监控系统 需要运行在PC端 项目技术 vue electron vue router vuex vuex electron element ui echarts mysql 打包异常 Error Unresolved
  • 移动H2-3获取超管密码

    本文主要参考自 https www bilibili com read cv18292443 确保能正常访问光猫后台 192 168 1 1 然后用浏览器打开 http 192 168 1 1 webcmcc gui device info
  • 物联网技术及应用计算机,物联网的关键技术及计算机物联网的应用

    关键词 计算机 物联网 关键技术 应用 1 物联网的相关介绍 1 1 物联网的概念 物联网 Internet of things 是科技高速发展的产物 也是信息时代发展的象征 从字面意思来看 物联网就是通过互联网将相同的或者不同的物体连接起
  • 数据库系统原理———两段锁协议、死锁练习题

    一 题目描述 14 考虑T和T2两个事务 T1 R A R B B A B W B T2 R B R A A A B W A 1 改写T和T2 增加加锁操作和解锁操作 并要求遵循两阶段封锁协议 2 说明T和T2的执行是否会引起死锁 给出T和
  • Go语言创始人从Google离职

    点击关注公众号 互联网架构师 后台回复 2T获取2TB学习资源 上一篇 Alibaba开源内网高并发编程手册 pdf 前两天 谷歌Go语言产品负责人Steve Francia突然宣布离职 并回顾总结自己在谷歌的6年生涯经历 以及分享了离开的
  • Selenium成长之路-07简单对象定位之tag name方法

    继续学习元素定位 tag name 每个前端开发人员 都有自己的习惯 所以 不一定每一个开发人员都喜欢用id name来做标签 所以我们就需要掌握其他的定位方法 例如tag name 下面我们继续来进行百度首页的定位 可以看到首页下图中红框
  • linux命令---GNU awk介绍

    概述 gawk是GNU工程 是一种编程语言 它实现了标准awk的所有功能 用于在linux unix下对文本和数据进行处理 数据可以来自标准输入 stdin 一个或多个文件 或其它命令的输出 它支持用户自定义函数和动态正则表达式等先进功能
  • Qt 使用openssl库

    在windows下面 QT开发使用ssl库一开始总会有些问题 这里记录一下最近解决的找不到库的经过 安装QT时如果选择了支持openssl 那么qt就会编译一个版本的openssl库 通常会放在几个地方 这里就不多说了 在安装目录找一找就是
  • PTAL1-016 查验身份证 c++实现 多种方法 多种细节

    目录 先上代码 我遇到的问题 首先 对题目的理解 其次 是对代码的优化问题 最后 返回值 多种解法 1 换种数据结构 2 back 函数 3 类 先上代码 include
  • 如何在app store营销之实战技巧(6)

    是的 偶不算程序员 试头像 秀一下业娱作品 第520贴 献给我爱的XXX google docs被墙了 chrome os 2009 iPhone全球技术巡讲 北京站参会确认 邮件收到了 哈哈 恭喜Dr Stone Wars Lite升级啦
  • vue实现给页面添加水印

    第一步 先封装以下文件 创建utils watermark js文件 水印添加方法 let setWatermark str1 str2 gt let id 1 23452384164 123412415 if document getEl
  • 华为机试练习(十)求第K多连续重复子串

    题目描述 给定字符串 str 和正数 K 求出现次数第 k 多的重复的子串 样例输入 AAAAHHHBBCDHHHH 3 样例输出 2 说明 A 4 H 4 H 3 B 2 C 1 D 1 求第3次数多的 本来应该是H 但是由于H在之前已经
  • JS实现注册登录发送短信验证码动态显示60S倒计时完整案例

    通常在web项目中都会遇到账户注册或者忘记密码时需要发送短信验证码的功能 虽然说这种功能很常见 但是实际开发过程中很多人还会遇到不少坑 笔者经过整理把最近项目中的用到的这个发送短信验证码动态显示60S倒计时的完整实现过程分享给广大开发者朋友