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模块化和命名空间管理的问题说明
Dec 06 Javascript
15个款优秀的 jQuery 图片特效插件推荐
Nov 21 Javascript
表格单元格交错着色实现思路及代码
Apr 01 Javascript
JS隐藏参数post传值实例
Apr 18 Javascript
深入理解javascript原型链和继承
Sep 23 Javascript
JavaScript对Cookie进行读写操作实例
Jul 25 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
Apr 01 Javascript
vue v-model表单控件绑定详解
May 17 Javascript
Angularjs上传文件组件flowjs功能
Aug 07 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 Javascript
javascript中关于类型判断的一些疑惑小结
Oct 14 Javascript
微信小程序自定义键盘 内部虚拟支付
Dec 20 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生成静态页面详解
2006/11/19 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
js Function类型
2011/12/04 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
js中replace的用法总结
2013/12/27 Javascript
document.write的几点使用心得
2014/05/14 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
详解Django admin高级用法
2019/11/06 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
物业管理毕业生个人的求职信
2013/11/30 职场文书
丑小鸭教学反思
2014/02/03 职场文书
大学生创业计划书
2014/08/14 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书