jquery Ajax Queue 队列实现
有时候我们需要按顺序调用一组ajax,这些ajax需要有先后顺序,类似于同步的ajax,那么我们可以通过以下的方式来实现:
(这个Ajax用到jQuery.post)
//定义一个AJAX队列
$.newAjaxQueue = function() {
var queue = [],posting=false, fn = function() {
if(queue.length){
posting = true;
var request = queue.shift();
var url = request.url;
var params = request.params;
var callback = request.callback;
if (typeof(params) === 'function') {
callback = params;
params = {};
}
$.post(url, params, function(response, status, xhr) {
try{
if (typeof(callback) === 'function') {
callback(response);
}
}finally{
fn();
posting = false;
}
}, 'text');
}
},instance = ({
post: function(url,params,callback){
queue.push({
url:url,params:params,callback:callback
});
if(posting===false){
fn();
}
return instance;
}
});
return instance;
};
使用方法:
首先创建一个Ajax队列,然后为这个Ajax队列,添加需要执行的ajax操作(post操作),这些Ajax会按顺序执行,一个执行完毕之后(获得返回值),再继续执行下一个。
$.newAjaxQueue().post( [URL] , [参数] ,[回调函数] ).post( [URL] , [参数] ,[回调函数] ).post( [URL] , [参数] ,[回调函数] );
这个实现没有考虑到超时等情况,如果需要可以自己添加。
演示例子:
<html>
<body>
<script type="text/javascript">
//这个地方应该引用jQuery,此处只是个测试的例子,提供一个$.post方法。
var $={post:function(url,params,callback){setTimeout(function(){callback('{}' + url);},(Math.random()*1000)>>0);}}
//打印输出的测试方法
var log = function(info){
var div = document.createElement('div');
div.innerHTML=info;
document.body.appendChild(div);
}
//定义一个AJAX队列
$.newAjaxQueue = function() {
var queue = [],posting=false, fn = function() {
if(queue.length){
posting = true;
var request = queue.shift();
var url = request.url;
var params = request.params;
var callback = request.callback;
if (typeof(params) === 'function') {
callback = params;
params = {};
}
$.post(url, params, function(response, status, xhr) {
try{
if (typeof(callback) === 'function') {
callback(response);
}
}finally{
fn();
posting = false;
}
}, 'text');
}
},instance = ({
post: function(url,params,callback){
queue.push({
url:url,params:params,callback:callback
});
if(posting===false){
fn();
}
return instance;
}
});
return instance;
};
//测试队列的执行
$.newAjaxQueue().post('url1', {a:1},function(response){
log('test:1');
}).post('url2', {a:1},function(response){
log('test:2');
}).post('url3', {a:1},function(response){
log('test:3');
}).post('url4', {a:1},function(response){
log('test:4');
}).post('url5', {a:1},function(){
log('test:5');
});
</script></body></html>
jquery Ajax Queue 队列实现的更多相关文章
- jQuery源代码解析(3)—— ready载入、queue队列
ready.queue放在一块写,没有特殊的意思,仅仅是相对来说它俩可能源代码是最简单的了.ready是在dom载入完毕后.以最高速度触发,非常实用. queue是队列.比方动画的顺序触发就是通过默认 ...
- jQuery源码05 (3653 , 3797) queue() : 队列方法 : 执行顺序的管理
//对外接口 jQuery.extend({ queue: function( elem, type, data ) {//入队.元素.队列名字.存进去的函数 //jQuery.queue( this ...
- 用.NET MVC实现长轮询,与jQuery.AJAX即时双向通信
两周前用长轮询做了一个Chat,并移植到了Azure,还写了篇博客http://www.cnblogs.com/indream/p/3187540.html,让大家帮忙测试. 首先感谢300位注册用户 ...
- jQuery的动画队列
动画队列主要用到jQuery的queue.dequeue和clearqueue. 1.queue()函数主要是将一个动画函数数组绑定到一个队列上 2.dequeue()函数主要是执行队列的第一个函数, ...
- 关于Plupload结合上传插件jquery.plupload.queue的使用
之前使用过很多的上传组件,但对各种浏览器的兼容性太差,不得不放弃!! plupload 是款很强大的上传组件,不得不推荐.plupload 前端根据浏览器不同选择使用Html5. Gears, Sil ...
- jQuery框架-2.jQuery操作DOM节点与jQuery.ajax方法
一.jQuery操作DOM 内部插入操作: append(content|fn):向每个匹配的元素内部追加内容. prepend(content):向每个匹配的元素内部前置内容. 外部插入操作: af ...
- WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]
WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...
- jquery ajax api
执行一个异步的HTTP(Ajax)的请求. version added: 1.5jQuery.ajax( url, [ settings ] ) url一个用来包含发送请求的URL字符串. setti ...
- jquery12 queue() : 队列方法
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
随机推荐
- RenderMonkey 练习 第五天 【OpenGL NormalMapping】
1. 新建一个OpenGL 空effect; 2. 添加相关变量 右击Effect节点选择Add Variable->float->float / float3 添加镜面光强度.灯光位置和 ...
- Tile based Rendering 二 tbr and tbdr 优化建议tiled based deferred rendering
http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-TileBasedArchitectures.pdf tbr 和tbdr ...
- pyspider介绍及安装
一.pyspider简介 1.通过python脚本进行结构化信息的提取,follow链接调度抓取控制,实现最大的灵活性 2.通过web化的脚本编写.调试环境.web展现调度状态 3.抓取环模型成熟稳定 ...
- centos查看哪些包提供指定头文件
[问题]:项目迁移时,原来在suse上正常的代码在centos上报错: g++ -g -Wall -fPIC -I../include -I./ -I../src -I/share/comm_ext ...
- 常用HTML标签的全称及描述
常用HTML标签的英文全称及简单描述 HTML标签 英文全称 中文释义 a Anchor 锚 abbr Abbreviation 缩写词 acronym Acronym 取首字母的缩写词 addr ...
- escape(s, t)函数的实现
https://item.taobao.com/item.htm? spm=686.1000925.0.0.9TTLHO&id=535006878999 <span style=&quo ...
- java中接口与抽象类的区别
接口和抽象类的共同特征如下: 接口和抽象类都不能被实例化,位于继承树的顶端,用于被其他类实现和继承. 接口和抽象类都可以包含抽象的方法,实现接口的类或者继承抽象类的类都必须实现这些抽象的方法. 区别: ...
- 07-spring学习-bean的其他配置(了解)
首先需要明确,默认情况下,只要在applicationContext.xml文件里面配置的时候自动进行构造方法初始化. 但是用户也可以实现自己的配置,让其在第一次使用的时候进行初始化,这种操作叫做 延 ...
- CSS总结:
给一个div加上边框,为了让他能看到边框,给他加上颜色 border: 2px solid; border-color: #00a1e9; solid表示实线边框.没有这个看不到边框. {border ...
- OTU_Network&calc_otu
# -*- coding: utf-8 -*- # __author__ = 'JieYap' from biocluster.agent import Agent from biocluster.t ...