JS Ajax请求如何防止重复提交


Posted in Javascript onJune 13, 2016

好长时间没写js代码了刚好遇到这样的问题。我们系统多数表单没有做防止重复提交的。

由于不想在后端这边处理,因为假如由后端处理的话,就需要在页面加载的时候给出一次性的token值,加大了开发的工作量不说,还容易忘记做这个,同时,ajax也不好处理,需要提交失败的话同时返回新的token值。

所以我想在,js这边动手。其实以前和前端提过,久久不见动静,就只好弄块砖丢出去了。思路是,覆盖掉$.ajax,在这里面处理掉防止重复提交的问题,而前端的业务开发不受影响,不改代码,无感知。

我想架构的目的之一,就在于简化业务开发,屏蔽掉业务无关的细节,让一线开发安心写业务吧。

代码如下:

/**
* Created by xiayongsheng on 2016/6/12.
*/
;(function($){
var ajax = $.ajax;
// 用于存储ajax的请求
var ajaxState = {};
var kinhomAjax = function () {
var args = Array.prototype.slice.call(arguments, 0);
// url data 一致,
// 应该将 url取出,data按键值排序,后将值拼接在一起,进行sha1得到的值作为指纹
// 累先用 url作为指纹吧
var hash = typeof args[0] === 'string'?args[0]:args[0].url;
if (typeof ajaxState[hash] !== 'undefined') {
if (ajaxState[hash] > 3) {
alert('请不要重复提交,请求正在处理中');
}
++ajaxState[hash];
return $.Deferred();
}
ajaxState[hash] = 1;
var def = ajax.apply($,args);
def.done(function () {
delete ajaxState[hash];
});
return def;
};
$.ajax = kinhomAjax;
})(jQuery);

以上所述是小编给大家介绍的JS Ajax请求如何防止重复提交的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
js控制滚动条缓慢滚动到顶部实现代码
Mar 20 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
自定义刻度jQuery进度条及插件
Sep 02 Javascript
浅谈JavaScript中的this指针和引用知识
Aug 05 Javascript
BootStrap 动态表单效果
Jun 02 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
vue动态配置模板 'component is'代码
Jul 04 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
Sep 20 Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 Javascript
JavaScript判断微信浏览器实例代码
Jun 13 #Javascript
JavaScript判断是否是微信浏览器
Jun 13 #Javascript
JavaScript_object基础入门(必看篇)
Jun 13 #Javascript
js 连续赋值的简单实现
Jun 13 #Javascript
全面解析Bootstrap中Carousel轮播的使用方法
Jun 13 #Javascript
全面解析Bootstrap中tooltip、popover的使用方法
Jun 13 #Javascript
JavaScript遍历求解数独问题的主要思路小结
Jun 12 #Javascript
You might like
PHP伪静态写法附代码
2008/06/20 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
python和ruby,我选谁?
2017/09/13 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
Python 实现微信防撤回功能
2019/04/29 Python
Python Subprocess模块原理及实例
2019/08/26 Python
Python解析json代码实例解析
2019/11/25 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
python MD5加密的示例
2020/10/19 Python
python 录制系统声音的示例
2020/12/21 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
Java里面如何创建一个内部类的实例
2015/01/19 面试题
市场营销毕业生自荐信
2013/11/23 职场文书
学校后勤岗位职责
2014/02/19 职场文书
志愿者服务感言
2014/02/27 职场文书
个人违纪检讨书
2014/09/15 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS