/**

* 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重复提交权威解决方案相关推荐

  1. jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件

    jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集  jQuery框架学习第四天:使用jQ ...

  2. jQuery 表单验证插件 jQuery Validation Engine 使用

    jQuery 表单验证插件 jQuery Validation Engine 使用方式如下: 1.引入头文件(注意一定要把jQuery放在前面),指定使用 jQuery Validation Engi ...

  3. jQuery 表单验证插件jQuery Validation Engine用法详解

    功能强大的 jQuery 表单验证插件,适用于日常的 E-mail.电话号码.网址等验证及 Ajax 验证,除自身拥有丰富的验证规则外,还可以添加自定义的验证规则. jQuery Validation ...

  4. jquery表单ajax json数据,jquery序列化form表单使用ajax提交后处理返回的json数据

    1.返回json字符串: /** 将一个字符串输出到浏览器 */ protected void writeJson(String json) { PrintWriter pw = null; try ...

  5. jQuery表单提交和后台交互

    要求:仅使用jQuery提交表单和后台交互,不使用基于jQuery的表单插件 方式1.取到页面控件的值后拼接放在data中,传递到后台 页面代码: <!DOCTYPE html PUBLIC & ...

  6. html表单提交前验证,jquery表单提交前实现同步验证(附代码)

    jquery表单提交前实现同步验证 .int{ height: 30px; text-align: left; width: 600px; } label{ width: 200px; margin- ...

  7. ajax防止表单重复提交

    1.问题:当ajax进行表单提交,发送请求到后台,数据处理比较复杂,响应速度有所影响,此时,草所人员误以为点击无反应,便多次点击提交按钮,导致出现重复数据.  Ajax的原理简单来说通过XmlHttp ...

  8. JQuery表单的提交方式

    在MVC中,jQuery表单的提交方式尤为重要,表单的提交需要视图和控制器的密切连接使用. 控制器与视图的连接.接收分为三种: 自动提交:submit , action , methion 手动提交: ...

  9. 30 个最好的jQuery表单插件

    jQuery 的出现为我们的开发工作带来了极大的便利,而众多的基于jQuery插件的出现就犹如我们在 Firefox 中安装名目繁多的插件一样而乐此不疲,今天带给大家的是精心挑选的这30个最好的jQu ...

  10. jQuery Form Plugin (jquery表单插件)

    jQuery表单插件 jQuery.form 这是一个全面支持表单的jQuery插件,支持文件上传,包含以下一些方法: -ajaxForm -ajaxSubmit - formToArray - fo ...

最新文章

  1. 打包本地文件, 并使用Winscp上传脚本
  2. maven子项目传git_Maven Git发布
  3. 关于librtmp接收数据(接收网络电视的数据流)
  4. android launcher主要功能_[Android] 自动收取蚂蚁森林能量
  5. Photoshop 保存PNG格式交错和不交错有差别
  6. 《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】
  7. 2017年读书计划(一)
  8. boost::asio向socket中异步读写数据
  9. 哎呦,我他妈真操了!
  10. Python: Django和Flask关于解析request的参数请求
  11. 光域网(IES)在Unity3d中的应用【2020】
  12. Newtonsoft.Json.JsonConvert.DeserializeObject首次转换太慢问题
  13. comsol 5.3 matlab,COMSOL5.3在Linux下的安装
  14. # Vue 组件开发打包、Vue 项目打包、js库组件库打包使用
  15. iphone 计算机的shift键在哪,苹果电脑shift是哪个键 苹果电脑shift是什么键
  16. 生成BMP格式图片备忘
  17. LiteOS + PahoMQTT 连接华为云
  18. 使用O2OA二次开发搭建企业办公平台(十三)流程开发篇:报销审批流程表单开发
  19. 服务器2012不能复制文件夹,windows2012标准版 目录SYSVOL和Netlogon共享和文件同步问题 - 服务器论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  20. SQL Server 2016的安装

热门文章

  1. java resources 目录_Maven项目中读取src/main/resources目录下的配置文件的方法
  2. tortoise清理本地分支_TortoiseGit操作本地仓库的详细使用方法
  3. Apache Hudi x Pulsar Meetup杭州站火爆来袭,实践干货就等你来!
  4. 解读云原生下的可观察性发展方向
  5. 使用 CoreDNS sidecar 来优化 Kubernetes Pod dns 性能
  6. 智能建筑进入新的十年
  7. 游戏服务器端引擎——DogSE的设计
  8. 金铲铲之战高峰期1万人排队,LOL手游如果公测会怎样?
  9. 入职体检——项目列表(7项)
  10. TTS Text-to-speech(文字转语音)服务