php ajax jquery 表单重复提交,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;
}
});
php ajax jquery 表单重复提交,Jquery 防止Ajax重复提交权威解决方案相关推荐
- jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件
jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQ ...
- jQuery 表单验证插件 jQuery Validation Engine 使用
jQuery 表单验证插件 jQuery Validation Engine 使用方式如下: 1.引入头文件(注意一定要把jQuery放在前面),指定使用 jQuery Validation Engi ...
- jQuery 表单验证插件jQuery Validation Engine用法详解
功能强大的 jQuery 表单验证插件,适用于日常的 E-mail.电话号码.网址等验证及 Ajax 验证,除自身拥有丰富的验证规则外,还可以添加自定义的验证规则. jQuery Validation ...
- jquery表单ajax json数据,jquery序列化form表单使用ajax提交后处理返回的json数据
1.返回json字符串: /** 将一个字符串输出到浏览器 */ protected void writeJson(String json) { PrintWriter pw = null; try ...
- jQuery表单提交和后台交互
要求:仅使用jQuery提交表单和后台交互,不使用基于jQuery的表单插件 方式1.取到页面控件的值后拼接放在data中,传递到后台 页面代码: <!DOCTYPE html PUBLIC & ...
- html表单提交前验证,jquery表单提交前实现同步验证(附代码)
jquery表单提交前实现同步验证 .int{ height: 30px; text-align: left; width: 600px; } label{ width: 200px; margin- ...
- ajax防止表单重复提交
1.问题:当ajax进行表单提交,发送请求到后台,数据处理比较复杂,响应速度有所影响,此时,草所人员误以为点击无反应,便多次点击提交按钮,导致出现重复数据. Ajax的原理简单来说通过XmlHttp ...
- JQuery表单的提交方式
在MVC中,jQuery表单的提交方式尤为重要,表单的提交需要视图和控制器的密切连接使用. 控制器与视图的连接.接收分为三种: 自动提交:submit , action , methion 手动提交: ...
- 30 个最好的jQuery表单插件
jQuery 的出现为我们的开发工作带来了极大的便利,而众多的基于jQuery插件的出现就犹如我们在 Firefox 中安装名目繁多的插件一样而乐此不疲,今天带给大家的是精心挑选的这30个最好的jQu ...
- jQuery Form Plugin (jquery表单插件)
jQuery表单插件 jQuery.form 这是一个全面支持表单的jQuery插件,支持文件上传,包含以下一些方法: -ajaxForm -ajaxSubmit - formToArray - fo ...
最新文章
- 打包本地文件, 并使用Winscp上传脚本
- maven子项目传git_Maven Git发布
- 关于librtmp接收数据(接收网络电视的数据流)
- android launcher主要功能_[Android] 自动收取蚂蚁森林能量
- Photoshop 保存PNG格式交错和不交错有差别
- 《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】
- 2017年读书计划(一)
- boost::asio向socket中异步读写数据
- 哎呦,我他妈真操了!
- Python: Django和Flask关于解析request的参数请求
- 光域网(IES)在Unity3d中的应用【2020】
- Newtonsoft.Json.JsonConvert.DeserializeObject首次转换太慢问题
- comsol 5.3 matlab,COMSOL5.3在Linux下的安装
- # Vue 组件开发打包、Vue 项目打包、js库组件库打包使用
- iphone 计算机的shift键在哪,苹果电脑shift是哪个键 苹果电脑shift是什么键
- 生成BMP格式图片备忘
- LiteOS + PahoMQTT 连接华为云
- 使用O2OA二次开发搭建企业办公平台(十三)流程开发篇:报销审批流程表单开发
- 服务器2012不能复制文件夹,windows2012标准版 目录SYSVOL和Netlogon共享和文件同步问题 - 服务器论坛 - 51CTO技术论坛_中国领先的IT技术社区...
- SQL Server 2016的安装
热门文章
- java resources 目录_Maven项目中读取src/main/resources目录下的配置文件的方法
- tortoise清理本地分支_TortoiseGit操作本地仓库的详细使用方法
- Apache Hudi x Pulsar Meetup杭州站火爆来袭,实践干货就等你来!
- 解读云原生下的可观察性发展方向
- 使用 CoreDNS sidecar 来优化 Kubernetes Pod dns 性能
- 智能建筑进入新的十年
- 游戏服务器端引擎——DogSE的设计
- 金铲铲之战高峰期1万人排队,LOL手游如果公测会怎样?
- 入职体检——项目列表(7项)
- TTS Text-to-speech(文字转语音)服务