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 相关文章推荐
JavaScript 继承详解(三)
Jul 13 Javascript
基于jquery的实现简单的表格中增加或删除下一行
Aug 01 Javascript
from表单多个按钮提交用onclick跳转不同action
Apr 24 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
Aug 15 Javascript
JavaScript中合并数组的N种方法
Sep 16 Javascript
JavaScript中join()方法的使用简介
Jun 09 Javascript
JS实现可展开折叠层的鼠标拖曳效果
Oct 09 Javascript
jquery插件方式实现table查询功能的简单实例
Jun 06 Javascript
w3c编程挑战_初级脚本算法实战篇
Jun 23 Javascript
layui radio性别单选框赋值方法
Aug 15 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
详解JavaScript执行模型
Nov 16 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
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
python通过shutil实现快速文件复制的方法
2015/03/14 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
Python中格式化format()方法详解
2017/04/01 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
节水倡议书范文
2014/04/15 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
美容院员工规章制度
2015/08/05 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python