// 1: 放弃后触发的提交
// 2: 放弃先触发的提交
var Ajax_Unique_Status_Arr = [1, 2];
var pendingRequests = {};
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
var Ajax_Unique_Status = options.unique;
//这里的Ajax_Url可以针对post请求, 提取{url, data} 的object指纹;
var Ajax_Url = options.url;
console.log(options, originalOptions, jqXHR);
// 若无需,直接return;
if (Ajax_Unique_Status_Arr.indexOf(Ajax_Unique_Status) === -1) {
return;
}
// 去重处理
if (!pendingRequests[Ajax_Url]) {
pendingRequests[Ajax_Url] = jqXHR;
}else{
if (Ajax_Unique_Status === Ajax_Unique_Status_Arr[0]) {
jqXHR.abort();
console.log('abort current request , url is : ', Ajax_Url);
} else if (Ajax_Unique_Status === Ajax_Unique_Status_Arr[1]) {
pendingRequests[Ajax_Url].abort();
console.warn('abort last request , url is : ', Ajax_Url);
}
}
// 后期处理
var complete = options.complete;
options.complete = function(jqXHR, textStatus) {
pendingRequests[Ajax_Url] = null;
if ($.isFunction(complete)) {
complete.apply(this, arguments);
}
};
});
var url = 'http://www.grycheng.com/2016/01/07/%E7%AE%80%E8%BF%B0jquery-ajax%E7%9A%84%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F/';
$.ajax({
url,
type: 'GET',
// unique: 1,
complete : ()=>{
console.log('complete 1')
}
}).then((res)=>{
console.log('success 1')
}, (err)=>{
console.log('error 1')
})
$.ajax({
url,
type: 'POST',
// unique: 1,
}).complete((res)=>{
console.log('complete 22222', res)
})
jquery ajax 全局 去重 拦截
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在工作中往往需要对整个站点的请求做统一处理。 例如: 1.在发送请求之前,添加统一的验证头。 2.请求返回时,捕捉...
- jquery ajax成功响应后无法赋值给全局变量 另一种方法是先把返回的数据赋值给全局变量,然后再ajax请求的...
- 在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完...