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 相关文章推荐
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
在页面加载完成后通过jquery给多个span赋值
May 21 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
js实现简单锁屏功能实例
May 27 Javascript
第五篇Bootstrap 排版
Jun 21 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
对js中回调函数的一些看法
Aug 29 Javascript
JavaScript中apply方法的应用技巧小结
Sep 29 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
js实现列表向上无限滚动
Jan 13 Javascript
基于vue实现简易打地鼠游戏
Aug 21 Javascript
canvas多重阴影发光效果实现
Apr 20 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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
php flush类输出缓冲剖析
2008/10/19 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
php图片上传类 附调用方法
2016/05/15 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
js单词形式的运算符
2014/05/06 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
jquery增加和删除元素的方法
2015/01/14 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
理解javascript对象继承
2016/04/17 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
Python 命令行参数sys.argv
2008/09/06 Python
python实现从web抓取文档的方法
2014/09/26 Python
Python中实现三目运算的方法
2015/06/21 Python
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
在python里从协程返回一个值的示例
2019/02/19 Python
python连接PostgreSQL过程解析
2020/02/09 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
介绍一下EJB的体系结构
2012/08/01 面试题
2014小学教师年度考核工作总结
2014/12/03 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers