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实现菜单式图片滑动切换
Mar 14 Javascript
使用JavaScript制作一个简单的计数器的方法
Jul 07 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
利用Angularjs和bootstrap实现购物车功能
Aug 31 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 Javascript
简述vue中的config配置
Jan 23 Javascript
vue弹窗组件使用方法
Apr 28 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
May 26 Javascript
js Array.slice的8种不同用法示例
Jul 10 Javascript
详解基于Vue/React项目的移动端适配方案
Aug 23 Javascript
VUE+elementui面包屑实现动态路由详解
Nov 04 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 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在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
Javascript 类与静态类的实现
2010/04/01 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
javascript常用的方法分享
2015/07/01 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
使用mint-ui开发项目的一些心得(分享)
2017/09/07 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
判断网页编码的方法python版
2016/08/12 Python
python迭代dict的key和value的方法
2018/07/06 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
python 同时读取多个文件的例子
2019/07/16 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
广告宣传策划方案
2014/05/21 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
详解Vue的sync修饰符
2021/05/15 Vue.js
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers