jQuery如何防止Ajax重复提交


Posted in Javascript onOctober 14, 2016

首先说说防止重复点击提交是什么意思。

我们在访问有的网站,输入表单完成以后,单击提交按钮进行提交以后,提交按钮就会变为灰色,用户不能再单击第二次,直到重新加载页面或者跳转。这样,可以一定程度上防止用户重复提交导致应用程序上逻辑错误。

不妨引深来看,它不一定发生在表单的提交事件上,同样可以发生在ajax的异步请求上。有效地在web客户端采用一定机制去防止重复点击提交,将大大减轻服务器端压力。

下面看下代码关于jquery ajax防止重复提交。

**
* jquery ajax请求过滤,防止ajax请求重复发送,对ajax发送错误时进行统一处理
*/
$(function(){
var pendingRequests = {};
// 所有ajax请求的通用前置filter
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
var key = generatePendingRequestKey(options);
//请求是否已经存在
if(!pendingRequests[key]){
storePendingRequest(key,jqXHR);
}else{
//如果ajax请求已经存在,下一次相同的请求则取消,防止重复请求
jqXHR.abort();
}
//ajax请求完成时,从临时对象中清除请求对应的数据
var complete = options.complete;
options.complete = function(jqXHR, textStatus) {
//延时1000毫秒删除请求信息,表示同Key值请求不能在此时间段内重复提交
setTimeout(function(){
delete pendingRequests[jqXHR.pendingRequestKey];
},1000);
if ($.isFunction(complete)) {
complete.apply(this, arguments);
}
};
//统一的错误处理
var error = options.error;
options.error = function(jqXHR, textStatus) {
errorHandler(jqXHR, textStatus);
if ($.isFunction(error)) {
error.apply(this, arguments);
}
};
});
/**
* 当ajax请求发生错误时,统一进行拦截处理的方法
*/
function errorHandler(jqXHR, textStatus){
switch (jqXHR.status){
case(500):
internalError(jqXHR);
break;
case(403):
accessDenied(jqXHR);
break;
case(408):
timeoutError(jqXHR);
break;
case(404):
pageNotFound(jqXHR);
break;
default:
//otherError(jqXHR, textStatus);
}
}
function pageNotFound(jqXHR){
Component.warningMessageBox({
content:"请求访问的地址或内容不存在!"
});
}
function accessDenied(jqXHR){
Component.warningMessageBox({
content:"你无权进行此操作或页面访问!"
});
}
function internalError(jqXHR){
Component.warningMessageBox({
content:"服务器存在错误,未能正确处理你的请求!"
});
}
function timeoutError(jqXHR){
window.location.href=contextPath + "/j_spring_security_logout";
}
function otherError(jqXHR, textStatus){
Component.warningMessageBox({
content:"未知错误,错误代码:" + textStatus
});
}
/**
* 将ajax请求存储到临时对象中,用于根据key判断请求是否已经存在
*/
function storePendingRequest(key, jqXHR){
pendingRequests[key] = jqXHR;
jqXHR.pendingRequestKey = key;
}
/**
* 根据ajax请求参数构建一个临时存储key,此处简单的使用url作为key,
* 不考虑为解决请求类型为get时相同路径引起的缓存问题,采用随机码构建URL的情况
*/
function generatePendingRequestKey(options){
return options.url;
}
});

以上所述是小编给大家介绍的jquery防止Ajax重复提交的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
[对联广告] JS脚本类
Aug 27 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
javascript操作css属性
Dec 30 Javascript
javascript中interval与setTimeOut的区别示例介绍
Mar 14 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
jquery遍历函数siblings()用法实例
Dec 24 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 Javascript
jQuery基本过滤选择器用法示例
Sep 09 Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
Vue动态获取width的方法
Aug 22 Javascript
js实现坦克移动小游戏
Oct 28 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
Oct 14 #Javascript
浅析JS中对函数function的理解(基础篇)
Oct 14 #Javascript
js插件Jcrop自定义截取图片功能
Oct 14 #Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
Oct 14 #Javascript
Js动态设置rem来实现移动端字体的自适应代码
Oct 14 #Javascript
JS动态计算移动端rem的解决方案
Oct 14 #Javascript
javascript对浅拷贝和深拷贝的详解
Oct 14 #Javascript
You might like
php不用正则验证真假身份证
2013/11/06 PHP
php生成短网址示例
2014/05/05 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
JQUERY获取form表单值的代码
2010/07/17 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
Javascript的比较汇总
2016/07/25 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
vue实现评价星星功能
2020/06/30 Javascript
python 实现堆排序算法代码
2012/06/05 Python
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
Python实现图像几何变换
2015/07/06 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
python实现自动清理重复文件
2020/08/24 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
工作证明书
2015/06/15 职场文书
2016年母亲节寄语
2015/12/04 职场文书
2016年父亲节寄语
2015/12/04 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技