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玩一玩WSH吧
Feb 23 Javascript
用JavaScript编写COM组件的步骤
Mar 17 Javascript
动感效果的TAB选项卡jquery 插件
Jul 09 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
Jan 23 Javascript
JS+Canvas 实现下雨下雪效果
May 18 Javascript
js实现可输入可选择的select下拉框
Dec 21 Javascript
js实现三级联动效果(简单易懂)
Mar 27 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
Oct 12 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
Nov 30 Javascript
用Golang运行JavaScript的实现示例
Nov 25 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
jquery实现拖拽小方块效果
Dec 10 jQuery
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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
10 个经典PHP函数
2013/10/17 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
浅谈php://filter的妙用
2019/03/05 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
js实现点赞效果
2020/03/16 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
matplotlib实现区域颜色填充
2019/03/18 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
python退出循环的方法
2020/06/18 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
预备党员思想汇报范文
2014/01/11 职场文书
运动会四百米广播稿
2014/01/19 职场文书
技校个人求职信范文
2014/01/25 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
新闻发布会主持词
2014/03/28 职场文书
护士实习求职信
2014/06/22 职场文书
爱情保证书
2015/01/17 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python