jquer之ajaxQueue简单实现
手头不是很忙,突然想到了ajax queue这个概念,之前貌似有看技术文章中提到过这个,就想着用jquery来实现一下,思想比较简单,没什么复杂的东西,就是用个array对象来做队列,维护ajax请求的顺序。下面给出代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
;( function ($) { $.ajaxQueue = { // 管理ajax请求的队列 requests: new Array(), // 把待发送的ajax请求加入队列 offer: function (options) { var _self = this , // 对complete,beforeSend方法进行“劫持”,加入队列处理方法poll xhrOptions = $.extend({}, options, { // 如果请求完成,发送下一个请求 complete: function (jqXHR, textStatus) { if (options.complete) options.complete.call( this , jqXHR, textStatus); _self.poll(); }, // 如果请求被取消,继续发送下一个请求 beforeSend: function (jqXHR, settings) { if (options.beforeSend) var ret = options.beforeSend.call( this , jqXHR, settings); if (ret === false ) { _self.poll(); return ret; } } }); this .requests.push(xhrOptions); if ( this .requests.length == 1) { $.ajax(xhrOptions); } }, // 用FIFO方式发送ajax请求 poll: function () { if ( this .isEmpty()) { return null ; } var processedRequest = this .requests.shift(); var nextRequest = this .peek(); if (nextRequest != null ) { $.ajax(nextRequest); } return processedRequest; }, // 返回队列头部的ajax请求 peek: function () { if ( this .isEmpty()) { return null ; } var nextRequest = this .requests[0]; return nextRequest; }, // 判断队列是否为空 isEmpty: function () { return this .requests.length == 0; } } })(jQuery); |
使用的话就是$.ajaxQueue.offer(settings),settings的配置和jQuery文档的一致。
如果您感兴趣,可以点击我的jsFiddle share进行在线运行,修改等。最后有什么问题,欢迎提出交流 :)