jquery Ajax Queue 队列实现
2013-09-12 18:05
295 查看
有时候我们需要按顺序调用一组ajax,这些ajax需要有先后顺序,类似于同步的ajax,那么我们可以通过以下的方式来实现:
(这个Ajax用到jQuery.post)
使用方法:
首先创建一个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>
(这个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实现的ajax队列(queue)
- jquery源码解析:jQuery队列操作queue方法实现的原理
- Java实现栈Stack和队列Queue
- Jquery&ajax实现无限刷卡(扫码器扫描),一键认证/确认操作
- 利用JQuery实现Struts2的Ajax功能
- Jquery EasyUI +Ajax +Json +一般处理程序 实现数据的前台与后台的交互 --- 善良公社项目
- jquery+ajax列表过滤以及高亮的实现
- 240个jQuery实现AJAX插件
- (局部刷新)jquery.ajax提交并实现单个div刷新
- 基于jquery和php实现AJAX长轮询(LongPoll)
- jQuery实现ajax提交form表单(可以是提交json),用springmvc接收。图文详解
- 笔试算法题(57):基于堆的优先级队列实现和性能分析(Priority Queue based on Heap)
- ajax+jQuery实现级联显示地址的方法
- jQuery+ajax实现顶一下,踩一下效果
- jquery队列queue与原生模仿其实现方法分享
- ASP.NET MVC + Jquery 实现Ajax下拉框数据三级联动
- JQuery+Ajax实现登录验证
- jQuery插件AjaxFileUpload实现ajax文件上传
- ConcurrentLinkedQueue非阻塞队列实现原理分析