应用场景

在开发“发送短信验证”功能时候,要解决一个问题,防止恶意或频繁发送短信验证码问题。一般原理是“当点击发送按钮时,发送ajax请求到服务器发送短信验证码,成功则把发送按钮设置为不可点击,并且调用定时器,按钮显示倒计时”。如果就这样不对倒计时存储做处理,那么当刷新页面,会出现倒计时失效,按钮可点击。提供以下解决方案:
利用cookie存储倒计时
发送成功后把剩余倒计时存储到cookie,当页面刷新时,检查cookie 是否还存储着剩余倒计时?,如果有,发送按钮则保持倒计时状态,不可点击,否则发送按钮可点击。
HTML代码
<input type="button" id="btn" disabled="disabled" value="获取验证码">
jQuery代码
<!--引入jquery.cookie.js 插件-->
<script src="http:jquery.cookie.js" type="text/javascript" charset="utf-8"></script>
<!--逻辑功能代码 -->
<script>
$(function(){
if($.cookie("total")!=undefined&&$.cookie("total")!='NaN'&&$.cookie("total")!='null'){//cookie存在倒计时
timekeeping();
}else{//cookie 没有倒计时
$('#btn').attr("disabled", false);
}
function timekeeping(){
//把按钮设置为不可以点击
$('#btn').attr("disabled", true);
var interval=setInterval(function(){//每秒读取一次cookie
//从cookie 中读取剩余倒计时
total=$.cookie("total");
//在发送按钮显示剩余倒计时
$('#btn').val('请等待'+total+'秒');
//把剩余总倒计时减掉1
total--;
if(total==0){//剩余倒计时为零,则显示 重新发送,可点击
//清除定时器
clearInterval(interval);
//删除cookie
total=$.cookie("total",total, { expires: -1 });
//显示重新发送
$('#btn').val('重新发送');
//把发送按钮设置为可点击
$('#btn').attr("disabled", false);
}else{//剩余倒计时不为零
//重新写入总倒计时
$.cookie("total",total);
}
},1000);
}
//绑定发送按钮
$('#btn').click(function(event) {
/* Act on the event */
// alert($("#btn").val());
//校验手机号码
var phone=$('#phone').val();
var pre=/^[1][358][0-9]{9}$/;
if(phone==''){
layer.open({
content: '手机号码不能为空',
time: 2
});
return this;
}else{
var pre=/^[1][358][0-9]{9}$/;
if(!pre.test(phone)){
layer.open({
content: '手机号码格式有误!',
time: 2
});
return this;
}
}
$.ajax({
url: '',//服务器发送短信
type: 'GET',
dataType: 'json',
data: {phone: phone},
})
.done(function(re) {
var str="发送短信验证码成功,请注意查看您的手机";
// console.log(re);
if(re){
$.cookie("total",60);
timekeeping();
}else{
switch (re[0]) {
case '160038':
str="短信验证码发送过频繁";
break;
case '160034':
str="号码黑名单";
break;
case '160000':
str="系统错误";
break;
case '000000':
str="发送成功";
break;
case '112300':
str="接收短信的手机号码为空";
break;
case '160040':
str="验证码超出发送上限";
break;
case '160042':
str="号码格式有误";
break;
default:
str="发送验证码失败";
break;
}
}
layer.open({
content: str,
time: 2
});
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
});
})
</script>
以上所述是小编给大家介绍的JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# js发送短信验证码倒计时
# JS+HTML5实现获取手机验证码倒计时按钮
# JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
# Angular.js实现获取验证码倒计时60秒按钮的简单方法
# 点击按钮出现60秒倒计时的简单js代码(推荐)
# js代码实现点击按钮出现60秒倒计时
# JS自动倒计时30秒后按钮才可用(两种场景)
# JS按钮倒计时并跳转到新地址的实现代码
# 倒计时
# 验证码
# 发送短信
# 设置为
# 小编
# 为零
# 为空
# 您的
# 在此
# 不可以
# 给大家
# 请注意
# 一个问题
# 所述
# 绑定
# 给我留言
# 感谢大家
# 则把
# 疑问请
# 有任何
相关文章:
C++如何使用std::optional?(处理可选值)
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何快速生成专业多端适配建站电话?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何使用Golang安装API文档生成工具_快速生成接口文档
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何在Golang中指定模块版本_使用go.mod控制版本号
如何在景安服务器上快速搭建个人网站?
建站之星代理平台如何选择最佳方案?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何确认建站备案号应放置的具体位置?
建站主机类型有哪些?如何正确选型
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
高端网站建设与定制开发一站式解决方案 中企动力
购物网站制作公司有哪些,哪个购物网站比较好?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
TestNG的testng.xml配置文件怎么写
如何用PHP快速搭建高效网站?分步指南
装修招标网站设计制作流程,装修招标流程?
网站制作员失业,怎样查看自己网站的注册者?
小型网站建站如何选择虚拟主机?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何通过万网虚拟主机快速搭建网站?
如何用wdcp快速搭建高效网站?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何获取免费开源的自助建站系统源码?
网页设计与网站制作内容,怎样注册网站?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
如何通过虚拟机搭建网站?详细步骤解析
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何破解联通资金短缺导致的基站建设难题?
如何用景安虚拟主机手机版绑定域名建站?
定制建站哪家更专业可靠?推荐榜单揭晓
如何在香港服务器上快速搭建免备案网站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
建站之星与建站宝盒如何选择最佳方案?
深圳网站制作培训,深圳哪些招聘网站比较好?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
导航网站建站方案与优化指南:一站式高效搭建技巧解析
建站为何优先选择香港服务器?
建站主机数据库如何配置才能提升网站性能?
教学网站制作软件,学习*后期制作的网站有哪些?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
建站之星代理如何优化在线客服效率?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何彻底卸载建站之星软件?
如何选择高效可靠的多用户建站源码资源?
*请认真填写需求信息,我们会在24小时内与您取得联系。