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 相关文章推荐
javascript五图轮播切换实用版
Aug 17 Javascript
快速查找数组中的某个元素并返回下标示例
Sep 03 Javascript
jquery提交form表单简单示例分享
Mar 03 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
Aug 31 Javascript
Javascript中的Prototype到底是什么
Feb 16 Javascript
AngularJS 避繁就简的路由
Jul 01 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
react-router实现跳转传值的方法示例
May 27 Javascript
原生js实现移动端触摸轮播的示例代码
Dec 22 Javascript
原生JS实现图片懒加载之页面性能优化
Apr 26 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
Ant design vue中的联动选择取消操作
Oct 31 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中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
PHP入门学习笔记之一
2010/10/12 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
取得父标签
2006/11/14 Javascript
javascript中对对层的控制
2006/12/29 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
python实现ping命令小程序
2020/12/28 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
ORACLE第二个十问
2013/12/14 面试题
实习心得体会
2014/01/02 职场文书
公司副总经理任命书
2014/06/05 职场文书
审计班子对照检查材料
2014/08/27 职场文书
政府个人对照检查材料
2014/08/28 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
工作服管理制度范本
2015/08/06 职场文书
Redis批量生成数据的实现
2022/06/05 Redis