yii防止延迟用户多次点击按钮重复提交数据

是不是被用户的行为所困扰?

一、

一个表单用户点击提交按钮了N次,这也导致了数据提交了N次。

为了此受到了测试的欺辱,受到了老板的批评?

不用怕,它就是来拯救你的。

第一步:打开命令行,敲入 composer require light\yii2-lock-form=~1.0.0

第二步:上个厕所

第三步:如果你的项目中已经使用了 yii2-bootstrap, 那么好,只需要在的你的 AppAsset 「whatever, 只要你全局依赖的就成」

轻轻的敲入:


‘depends‘ => [
    //other depends
    ‘light\widgets\LockBsFormAsset‘
]

如果你没使用 yii2-bootstrap 也能满足您:你只需要将 light\widgets\LockBsFormAsset 替换成 light\widgets\LockFormAsset.

还需要做什么?

如果还需要做的话,那就是定制一下 Lock 用语,


Html::submitButton(‘提交‘, [‘data-loading-text‘ => ‘正在提交数据, 不让你点,哼‘])

说了这么多,东西在那儿?

https://github.com/lichunqiang/yii2-lock-form

重要的事情要说三遍:star,star, star, little star, 一闪一闪亮晶晶。

二、

表单提交时,由于网速等原因,会出现重复提交的现象。

一、从前端的角度:增加遮罩

二、从后端的角度:使用session。
/可复用代码

$session = Yii::app()->session;

        $user_id = $this->user->id;
        $sessionKey = $user_id.‘_is_sending‘;


        if(isset($session[$sessionKey])){
            $first_submit_time = $session[$sessionKey];
            $current_time      = time();
            if($current_time - $first_submit_time < 10){
                $session[$sessionKey] = $current_time;
                $this->response(array(‘status‘=>1, ‘msg‘=>‘不能在10秒钟内连续发送两次。‘));
            }else{
                unset($session[$sessionKey]);//超过限制时间,释放session";  
            }
        }


        //第一次点击确认按钮时执行  
        if(!isset($session[$sessionKey])){
            $session[$sessionKey] = time();
        }
时间: 2025-01-05 20:30:22

yii防止延迟用户多次点击按钮重复提交数据的相关文章

如何避免新建的时候点击按钮重复提交ruby on rails

为了避免新建的时候重复的点击提交按钮,可以加一个限制 <%= f.submit nil, :class => 'btn btn-primary', :data => { :"disable-with" => "请稍等..." } %>

ASP.NET怎么防止多次点击提交按钮重复提交

今天做一个系统,由于服务器有点慢,所以常会被点击两次或三次,提交的数据就是多次了.所以要让按钮点击后,不能再次点击. 对于一个按钮,要让变成恢色的,只要this.disabled=true就可以了,可是在.NET里,添加了ONCLICK后,就无法提交信息了.所以要加上以下代码. <asp:Button ID="btnSub" runat="server" Text="回复" OnClick="btnSub_Click"

ajax点击按钮出现提交框

代码如下: $(function(){     $('#bbtn').click(function(){     $.ajax({     type:'post',     url:'#',     data:{},     success:function(callback){         $('#part4').empty();     var ele = "<div>"     ele = ele + "<textarea name='order_

GrideVlew提供点击按钮添加新数据,单击项目修改,长按删除功能

package com.example.wang.myapplication; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import andro

表单中点击回车自动提交数据

<form action="**.php" method="post"> <input type="text" name="username"/> <input type="password" name="pwd"/> <input type="submit" onclick="if(event.keyCode==1

.net C# 利用Session防重复点击防重复提交

<body>    <form id="form1" runat="server">    <div>        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />        <br />        <

button点击按钮触发提交from表单数据

1.html代码 <form method="post" action="/xxx/" id="filter_all" > {% csrf_token %} <select name="filter_platform" id="filter_platform" style="height: 30px;border: 0;width: 250px;border-radius: 7p

微信小程序开发——连续快速点击按钮调用小程序api返回后仍然自动重新调用的异常处理

前言: 小程序开发中诸如获取用户手机号码.调起微信支付.领取卡券等api都是会有一定的延迟的.也就是说通过点击按钮调用这些api的时候,从点击按钮调用api,到支付页面或者领取卡券界面展示出来是需要一定时间的,连续点击按钮,还是有可能会重复调用的. 虽然这种情况有点极端,正常用户是不会这么连续快速的点击按钮的,但是也不能排除有用户手抖,连续点了两下.如果重复调用的话,不仅体验不好,单击事件中涉及到后端接口操作的也可能引起其他异常.所以这个问题还是要处理下的. 刚开始想到的是使用loading开启

重新理解了重定向,利用重定向可以防止用户重复提交表单(兼谈springmvc重定向操作)

自己用springmvc框架有一段时间了,但是都还一直分不清楚什么时候应该用转发,什么时候应该用重定向.可能用转发的情形太多了,以致于自己都忘记了还有重定向. 当用户提交post请求之后,刷新页面就会造成数据的再一次提交,也就是常说的重复提交.在网上查阅了相关资料,发现利用重定向可以有效防止重复提交数据. 重定向即客户端向服务器发送一个请求后,由服务端将请求按照程序里编码指定的请求方向再请求一次,在springmvc的开发中,返回一个重定向视图只需要在视图名称前加上"redirect:"