假期里没事就想着改进下,改得地方不多,主要有以下三点:
complete回调在jquery1.5以后可以是一个函数数组,按数组顺序调用。
如果前一个请求未返回,新的请求发出,那么撤销前一个请求,也就是新的请求“覆盖”原请求。
写成面向对象的形式,再用一个AjaxManage进行简单的管理。
代码如下,详细可看注释:
复制代码 代码如下:
;(function($) {
// override:新的请求是否要覆盖之前的请求
function AjaxQueue(override) {
this.override = !!override;
};
AjaxQueue.prototype = {
requests: new Array(),
offer: function(options) {
var _self = this;
var xhrOptions = $.extend({}, options, {
complete: function(jqXHR, textStatus) {
// 支持complete是函数数组的情况
if($.isArray(options.complete)) {
var funcs = options.complete;
for(var i = 0, len = funcs.length; i < len; i++)
funcs[i].call(this, jqXHR, textStatus);
} else {
if(options.complete)
options.complete.call(this, jqXHR, textStatus);
}
// 处理结束,从队列中发出下一个ajax请求
_self.poll();
},
beforeSend: function(jqXHR, settings) {
if(options.beforeSend)
var ret = options.beforeSend.call(this, jqXHR, settings);
// 如果当前ajax请求因为某些原因被撤销了,那么去发下一个ajax请求
if(ret === false) {
_self.poll();
return ret;
}
}
});
// 如果支持覆盖,那么调用replace
if(this.override) {
// console.log('go override');
this.replace(xhrOptions);
// 反之放入队列
} else {
// console.log('go queue');
this.requests.push(xhrOptions);
if(this.requests.length == 1) {
$.ajax(xhrOptions);
}
}
},
// 撤销前一个请求,发送新的请求
replace: function(xhrOptions) {
var prevRet = this.peek();
if(prevRet != null) {
// jquery源码中可以看到此方法
prevRet.abort();
}
this.requests.shift();
this.requests.push($.ajax(xhrOptions));
},
// 轮询队列 发送下一个请求
poll: function() {
if(this.isEmpty()) {
return null;
}
var processedRequest = this.requests.shift();
var nextRequest = this.peek();
if(nextRequest != null) {
$.ajax(nextRequest);
}
return processedRequest;
},
// 返回队列头部的请求
peek: function() {
if(this.isEmpty()) {
return null;
}
var nextRequest = this.requests[0];
return nextRequest;
},
// 判断队列是否为空
isEmpty: function() {
return this.requests.length == 0;
}
};
var queue = {};
// 管理AjaxQueue的简单对象
var AjaxManager = {
// 创建新的ajaxQueue
createQueue: function(name, override) {
return queue[name] = new AjaxQueue(override);
},
// 清除对应name的ajaxQueue
destroyQueue: function(name) {
if(queue[name]) {
queue[name] = null;
delete queue[name];
}
},
// 根据name得到对应的ajaxQueue
getQueue: function(name) {
return ( queue[name] ? queue[name] : null);
}
};
// 跟jQuery关联起来,给个简称,方便调用
$.AM = AjaxManager;
})(jQuery);
其实也想再加上done,fail,always等配置,但或许会变得有点复杂,就先保持简单
这里有两个我的jsfiddle页面,一个是覆盖效果的,一个是队列效果的,可以直接测试运行。
就到这里,如有问题,欢迎指出,thanks。
相关推荐:
URL泄露:如何防止信息泄露带来的严重后果,抖音推广营销服务多少钱
什么是seo模型,seo模块总结 ,ai技术授课
怎么使用AI生成文章,轻松提升写作效率!
SEO优化排名原理解析:如何提高网站排名,实现精准流量获取,奥迪ai售价
AI人工智能:开发与应用的必备软件推荐
seo渠道优化是什么,seo渠道推广怎么做 ,ai121333
ChatGPT:我目前无法查看或解析附件,您是否遇到过这样的困扰?,ai+燃烧
SEO对策:提升网站排名与流量的必备策略,SEO入门相机平价学生
优化入口:提升网站流量与转化率的秘密武器,琼海关键词排名品牌
seo需要会什么技术呢,seo需要会什么技术呢知乎 ,红色框ai
AI写作的崛起-“只能AI写作”背后的巨大潜力,舞狮摄影ai
GPT-3.5可以免费使用吗?AI未来的无限可能,ai烧猪
ChatGPT无法加载?检查您的网络设置并尝试重启,轻松解决连接问题!,ai制作艺术字
AI一键生成文章网页版,让内容创作更简单高效
ChatGPT暂时不可用?如何高效应对并寻找最佳替代方案!,logo ai教程视频
“标题制造机”:颠覆内容创作的秘密武器,助你轻松打造吸引力十足的标题,景区线上推广用哪些网站
好用的AI写作软件,让创作更高效
SEO挣钱之道:如何通过SEO实现网络盈利,宁晋网站建设商家
优化整站,让网站飞速增长,打造行业竞争力,广东网站建设与维护
什么是seo公司口碑,seo品牌 ,ai大模型训练是什么意思
seo需要学些什么内容,学seo的基础 ,中国ai公司年收入
SEO领先-如何借助SEO技术让您的网站脱颖而出,seo是黑客吗
SEO重要性与企业互联网发展的必由之路,互联网营销推广平台设计
SEO找出网站流量提升的终极策略,带你走向搜索引擎巅峰!,朝阳模板网站建设价格
pbootcms自动翻译插件,让你的网站轻松实现多语言覆盖,ai 镀金
怎么看文章是不是AI生成的?揭秘背后的玄机与技巧
优化百:开启数字时代的智能营销新时代,湘潭seo优化报价表
如何利用AI生成高质量文章,提升写作效率与创意?
AI缩写文档:革新文档管理与自动化的未来,ai聊天中文
SEO关键词是什么意思?全面解析SEO关键字的核心作用,华为ai音箱 百度ai音箱
如何识别文章是否由AI撰写?揭开智能写作的秘密
seo逻辑是什么,seo思路 ,语音主播怎么ai写作业
ChatGPT网络故障报告从协调世界时(UTC)晚上1107左右开始激增,15分钟内引发广泛关注,ai无视进化
seo计算了什么,seo的常用术语 ,ai智能有意思的口令
OpenAIGPTChatSoraOpenAIChatGPT服务在中断数小时后已恢复,ai视图线稿
在线AI文章生成:智能写作的无限可能
SEO到底怎么做?揭秘从零到精通的完整SEO优化攻略,鸟瞰ai
seo菲律宾是做什么,菲律宾网址排名 ,openl ai
SEO站内优化:提升网站排名的核心策略,厦门市网站优化企业
亚马逊seo信息是什么,亚马逊seo关键词优化软件 ,光谷ai
SEO课:让你从小白变成搜索引擎优化高手,推广自媒体营销计划
AI缩短短文-提升创作效率,写作新体验,光速写作业ai写作app
SEO优化如何提升网站排名,驾驭搜索引擎流量,三亚网站推广方法
优化综合:引领高效发展的智慧之道,电影营销的推广方式
SEO新人必读:从零开始SEO的核心技巧与实践指南,网站邮件推广设计
为什么选择B站VIP?让你畅享更丰富的视听体验,小门类网站seo
什么是seo技术,什么是seo及seo的作用 ,AI倒放仓鼠
360排名优化价格:打造高效网络营销的制胜法宝,ai换脸刘浩存自wei
怎么用AI写文:让创作更轻松,效率翻倍
SEO注意事项:助力网站流量提升的关键策略,济宁快速seo优化价格