【javascript】利用jquery ajaxPrefilter防止ajax重复提交
2024-09-01 15:13:39
利用jquery ajaxPrefilter中断请求
var pendingRequests = {};
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
var key = options.url;
console.log(key);
if (!pendingRequests[key]) {
pendingRequests[key] = jqXHR;
}else{
//jqXHR.abort(); //放弃后触发的提交
pendingRequests[key].abort(); // 放弃先触发的提交
}
var complete = options.complete;
options.complete = function(jqXHR, textStatus) {
pendingRequests[key] = null;
if ($.isFunction(complete)) {
complete.apply(this, arguments);
}
};
});
Prefilters是一个预过滤器,在每个请求之前被发送和 $.ajax()
处理它们前处理。
options 是请求的选项
originalOptions 值作为提供给Ajax方法未经修改的选项,因此,没有ajaxSettings设置中的默认值
jqXHR 是请求的jqXHR对象
以上内容的核心思想是维护一个队列,发送请求时,将请求加入队列,请求响应后,从队列中清除,这就保证了在任一时刻只能有一个同样的请求发送.
局限性:仅仅是前台防止jquery的ajax请求。对于非jquery的ajax请求,不起作用。因为使用的是jquery的ajaxPreFilter函数,仅仅对jquery的ajax请求有作用。
调用abort后jquery会执行error的方法,抛出abort的异常信息。可以使用以下方式区分出该类型的异常。
var ajax = $.ajax({
'error':function(jqXHR, textStatus, errorThrown){
if(errorThrown != 'abort'){
//ajax被调用abort后执行的方法
alert('您的ajax方法被停止了');
}
}
})
最新文章
- MyBatis通过JDBC生成的执行语句问题
- 忘记Windows7登陆密码解决办法
- 修改AssemblyInfo.cs自动生成版本号
- Vue.js之v-for
- [修正] Berlin 10.1 支持 iPhone 4 (iOS v7.x)
- PHP知识库图谱汇总(完善中)
- C#~异步编程续~.net4.5主推的await&;async应用(转)
- linux 修改端口限制
- 【BZOJ】【1004】【HNOI2008】Cards
- 深入理解Java内存模型(二)——重排序
- I.MX6 Linux 自动获取AR1020 event input节点
- 用 C# 如何判断数据库中是否存在一个值
- QUARTZ CRON
- 配置managed server
- EOS智能合约存储实例讲解
- SQL 的单引号转义字符
- luogu P4515 [COCI2009-2010#6] XOR
- Django中HtttpRequest请求
- [整理]C语言中的static静态对象
- win10下安装MySQL5.7.20
热门文章
- RabbitMQ入门(1)——Hello World
- 代码审查工具Sonarqube安装
- Apache的MaxClients设置
- LeetCode第[78]题(Java):Subsets(求子集)扩展——第[90]题:Subsets 2
- url 、src 、href 的区别
- react native easter的分享
- Linux下部署 jar包
- Tomcat 的context.xml说明、Context标签讲解
- Educational Codeforces Round 42 (Rated for Div. 2)F - Simple Cycles Edges
- 第六天 文件的基本管理和xfs文进系统备份恢复