在登录或注册中少不了通过手机号获取验证码。
一般获取验证码后会进行倒计时防止用户过快重复获取验证码。
var timer,enable = true;
$('#sendcode').click(function(e){
if(!enable || timer){
return ;
}
enable = !enable;
setTimeout(function(){ //模拟异步请求
//获取验证码后提示,按钮显示倒计时
var _dura = 60;
timer = setInterval(function(){
_dura--;
//设置按钮文字
···
if(_dura === 0){
enable = true
clearInterval(timer);
timer = null;
//设置按钮文字
···
}
},1000)
//ajax error 中设置enable = true
},1000)
})
虽然可以实现,但是浏览器刷新一下就可以重新获取了。可以把倒计时存到cookie中。
//引入jqeury.cookie.js
//定时器中设置倒计时时,更新cookie中的倒计时值。
$.cookie("sendCode", 60, { expires: 1 });
//在页面记载完成后获取cookie对应值。如果有对应值,则开始倒计时
if($.cookie("sendCode")){
var _dura = $.cookie("sendCode");
timer = setInterval(function(){
_dura--;
//设置按钮文字
···
if(_dura === 0){
enable = true
clearInterval(timer);
timer = null;
//设置按钮文字
···
}
},1000)
}
当然存到cookie中后如果用户手动清除cookie,还是可以重新获取验证码。可以让服务器端配合实现
//后台提供接口,通过sesstionid判断是否可重新获取
//ajax 判断按钮是否可用 ,如果不可用进行倒计时。
$.ajax({
url: "/getCode",
success: function (res) {
if (res.code === '000000' && res.data.countdown != 0) {
var _dura = res.data.countdown;
timer = setInterval(function(){
_dura--;
//设置按钮文字
if(_dura === 0){
enable = true
clearInterval(timer);
timer = null;
//设置按钮文字
}
},1000)
}
},
error: function (res) {
}
});
博客围绕登录或注册时手机号获取验证码展开,提到获取验证码后通常有倒计时防止重复获取,但浏览器刷新可重新获取。提出将倒计时存到cookie中,不过手动清除cookie仍能重新获取,最终建议让服务器端配合实现。
3232

被折叠的 条评论
为什么被折叠?



