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实现的网页颜色代码表全集
Jul 17 Javascript
基于jQuery图片平滑连续滚动插件
Apr 27 Javascript
js+html5实现canvas绘制镂空字体文本的方法
Jun 05 Javascript
探讨AngularJs中ui.route的简单应用
Nov 16 Javascript
完美解决JS文件页面加载时的阻塞问题
Dec 18 Javascript
ES6入门教程之let和const命令详解
May 17 Javascript
详解Vue 非父子组件通信方法(非Vuex)
May 24 Javascript
node跨域请求方法小结
Aug 25 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
Sep 15 Javascript
vue axios 表单提交上传图片的实例
Mar 16 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
Jun 01 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 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解析目录路径的3个函数总结
2014/11/18 PHP
yii的CURD操作实例详解
2014/12/04 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
js 判断 enter 事件
2009/02/12 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
JavaScript常用工具函数大全
2020/05/06 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
python snownlp情感分析简易demo(分享)
2017/06/04 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
详解KMP算法以及python如何实现
2020/09/18 Python
美国女孩服装购物网站:Justice
2017/03/04 全球购物
大一军训感言
2014/01/09 职场文书
创先争优承诺书范文
2014/03/31 职场文书
班委竞选演讲稿
2014/04/28 职场文书
银行金融服务方案
2014/06/11 职场文书
参赛口号
2014/06/16 职场文书
八一建军节演讲稿
2014/09/10 职场文书
小学国庆节活动总结
2015/03/23 职场文书
入门学习Go的基本语法
2021/07/07 Golang
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫