- 原理就是把pending狀態時的res存入全局變量中,pending過程時對這些res進行選擇性abort
- 感覺比單獨設置一個flag方便,且適應型廣
當只需要最后一次ajax
window.pendingRequests = {};
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
var key = options.url+Math.random();
if (!pendingRequests[key] && key.indexOf('.html') == -1) {
pendingRequests[key] =jqXHR;
}
for(let i in pendingRequests)
if(i!=key){
pendingRequests[i].abort()
}
var complete = options.complete;
options.complete = function (jqXHR, textStatus) {
delete pendingRequests[key];
if ($.isFunction(complete)) {
complete.apply(this, arguments);
}
};
});
當只需要第一次ajax
window.pendingRequests = {};
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
var key=options.url;
if (!pendingRequests[key] && key.indexOf('.html') == -1) {
pendingRequests[key] =jqXHR;
} else if (key.indexOf('.html') == -1) {
jqXHR.abort();
}
var complete = options.complete;
options.complete = function (jqXHR, textStatus) {
delete pendingRequests[key];
if ($.isFunction(complete)) {
complete.apply(this, arguments);
}
};
});
同時執行多個不同api接口的且需要各自的最后一次時的ajax
window.pendingRequests = {};
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
var key=options.url
if (!pendingRequests[key] && key.indexOf('.html') == -1) {
console.log(false)
pendingRequests[key]=[]
pendingRequests[key].push(jqXHR)
}else{
console.log(true)
pendingRequests[key].push(jqXHR)
}
for(let i in pendingRequests){
let len=pendingRequests[i].length
for(let j=0;j<len-1;j++){
pendingRequests[i][j].abort()
}
}
setTimeout(function () {
var complete = options.complete;
options.complete = function (jqXHR, textStatus) {
delete pendingRequests[key];
if ($.isFunction(complete)) {
complete.apply(this, arguments);
}
};
},0)
});
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。