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 相关文章推荐
js不是基础的基础
Dec 24 Javascript
基于jQuery的试卷自动排版系统实现代码
Jan 06 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
Dec 19 Javascript
javascript实现超炫的向上滑行菜单实例
Aug 03 Javascript
JavaScript中的时间处理小结
Feb 24 Javascript
javascript的函数劫持浅析
Sep 26 Javascript
js倒计时显示实例
Dec 11 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
Jan 03 Javascript
Vue Spa切换页面时更改标题的实例代码
Jul 15 Javascript
详解React中的组件通信问题
Jul 31 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
May 19 jQuery
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计算整个目录大小的方法
2015/06/19 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
js文字横向滚动特效
2015/11/11 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
高中考试作弊检讨书
2014/01/14 职场文书
聊城大学毕业生自荐书
2014/02/01 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
员工教育培训协议书
2014/09/27 职场文书
基层工作经验证明样本
2014/11/16 职场文书
总经理助理岗位职责
2015/01/31 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
golang 实现Location跳转方式
2021/05/02 Golang