发送短信考证,后按钮倒计时,防备革新倒计时失效

运用场景

在开辟“发送短信考证”功用时刻,要处置惩罚一个题目,防备歹意或频仍发送短信考证码题目。平常道理是“当点击发送按钮时,发送ajax要求到服务器发送短信考证码,胜利则把发送按钮设置为不可点击,而且挪用定时器,按钮显现倒计时”。假如就这样不对倒计时存储做处置惩罚,那末当革新页面,会涌现倒计时失效,按钮可点击。供应以下处置惩罚方案:

  • 应用cookie存储倒计时

  • 应用HTML5的localStorage 存储倒计时

应用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>

    原文作者:烟火里的尘埃
    原文地址: https://segmentfault.com/a/1190000005914976
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞