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 高亮显示文本中重要的关键字
Dec 24 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
jquery检测input checked 控件是否被选中的方法
Mar 26 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
Mar 28 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
javascript数组遍历的方法实例分析
Sep 13 Javascript
详解React-Todos入门例子
Nov 08 Javascript
JS去除重复并统计数量的实现方法
Dec 15 Javascript
vue-cli创建的项目,配置多页面的实现方法
Mar 15 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
Nov 14 Javascript
原生js实现html手机端城市列表索引选择城市
Jun 24 Javascript
微信小程序 WeUI扩展组件库的入门教程
Apr 21 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
使用Python的内建模块collections的教程
2015/04/28 Python
Python实现计算最小编辑距离
2016/03/17 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
python制作英语翻译小工具代码实例
2019/09/09 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
python实现canny边缘检测
2020/09/14 Python
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
廉政教育心得体会
2014/01/01 职场文书
文明村创建实施方案
2014/03/27 职场文书
销售队伍口号
2014/06/11 职场文书
婚前协议书范本两则
2014/10/16 职场文书
军训决心书范文
2015/09/22 职场文书
党员反邪教心得体会
2016/01/15 职场文书
CSS基础详解
2021/10/16 HTML / CSS
docker-compose部署Yapi的方法
2022/04/08 Servers
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL