IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> input表单重复提交事件,前后端解决思路 -> 正文阅读

[JavaScript知识库]input表单重复提交事件,前后端解决思路

方法一:ajax提交,就要在提交之后禁用掉按钮(前端)

$('#submit').click(function(){
   $.ajax(...)
   $(this).attr('disabled,true) // 禁用按钮or
   $(this).css('pointer-event','none') // 来禁用点击事件
})

方法二:增加参数,判断提交次数(前端)

function onLine(objIds){
	var num = 0;
	layer.confirm('处理视频?', {
		btn: ['上架','退回','取消'], 
		shade: false,
		closeBtn: 1
	},
	function(){
		num += 1;
		if (num == 1) { // 不等于1说明是重复提交
			$.ajax({
				type: 'POST',
				.........

方法三 :JS加锁机制(前端)

	/出库
	output: function () {
	 console.log("出库请求---");           	                                    
	 var lock=false;//默认未锁定
	 var myconfirm=layer.confirm('是否确认出库?',{btn: ['确定','取消']},function(index){
	             console.log('success');
	             console.log(lock);
	              //
	              if(!lock){
	             	 lock=true;//锁定
	                  //发送
	                console.log("ajax---");
	                  //发送ajax
	                    $.ajax({
	                        url:  '/dubbo/../outBoundByTask.json',
	                        isAysn: false,
	                        type: 'get',
	                        contentType: 'application/json',
	                        data:params.join('&'),
	                        success: function (result) {
	                                               	
	                        	var res=$.parseJSON(result);
	                         var code=res.code;
	                         	
	                         	if(code==0){
	                         		layer.msg("操作成功!");
	                         		window.location.reload();
	                         	}else{
	                         		layer.msg(res.msg);
	                         	}
	                       }
	                    });
	              }
	              layer.close(myconfirm);
	             }
	             ,function(index){
	               console.log('fail');
	             });
	     }

方法四:layui加遮罩层(前端)

 /* 监听提交 */
 form.on('submit(component-form-demo2)', function (data) {
     layer.confirm('请确认输入数据是否准确无误', {
         btn: ['确定', '取消'],
         title: "立即提交",
     }, function () {
         layer.close();
         layer.load(0,{shade: [0.7, '#393D49']}, {shadeClose: true}); //0代表加载的风格,支持0-2
         $.ajax({
             'url': '{:Url("admin/Repertory/add")}',
             'data': JSON.stringify(data.field),
             'success': function (data) {
                 if (data.code === 1) {
                     layer.alert(data.msg, {
                         title: '成功'
                     },function () {
                         layer.closeAll();
                         //执行重载
                         location.reload();
                     });
                 } else {
                     layer.closeAll();
                     layer.alert(data.msg, {
                         title: '失败'
                     });
                 }
             },
             'dataType': 'json',//返回的格式
             'type': 'post',//发送的格式
         });
     });
     return false;
 });

请添加图片描述

方法五:利用PHP的Session功能(后端)

  • Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值.
  • 所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交。-
    简单来说,就是生成随机数,存到session中,提交时与session中的随机数校验.
A页面
<?php
session_start();                //根据当前SESSION生成随机数
$code = mt_rand(0,1000000);
$_SESSION['code'] = $code;      //将此随机数暂存入到session
?>
 
说明
B页面:
<?php
session_start();
if(isset($_POST['originator'])) {
    if($_POST['originator'] == $_SESSION['code']){
        echo "ok";
        unset($_SESSION["code"]);               //将其清除掉此时再按F5则无效
    }else{
    echo "请不要刷新本页面或重复提交表单";
    }
}?>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:39:54  更:2021-12-02 16:40:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:08:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码