// 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方法時我們有時會需要該方法返回一個值或者給某個全局變量賦值,可是我們發現程序執行完...