使用 Dojo 进行批量 Ajax 请求的多种处理方式(4)
- UID
- 1066743
|
使用 Dojo 进行批量 Ajax 请求的多种处理方式(4)
使用 Dojo 串行的处理多个 Ajax 请求实现原理利用前文中所述的方法可以串行的处理多个 Ajax 请求。但是存在一个问题,当需要串行处理的 Ajax 请求较多时,代码将显得又乱又长。并且,很多时候程序事先并不知道要串行处理多少个 Ajax 请求,因为这是由用户的操作决定的。在 dojox.lang.async 模块中,有一个静态函数 dojox.lang.async.seq 能够很好的帮我们解决这些问题。
用 dojox.lang.async.seq 的实现和示例dojox.lang.async.seq 也是接受一个函数的数组作为参数,并返回一个"dojo.Deferred"对象。在管理串行的 Ajax 请求时,可以使得传入的函数返回时调用 dojo.xhr 函数。该函数返回的 Deferred 对象达到"resolved"状态的条件是上述函数数组中的函数成功返回或者函数返回的 Deferred 对象都达到"resolved"状态。否则,该 Deferred 对象进入"rejected"状态。
回到之前的例子,现在我们需要删除轻音乐,民谣,乡村音乐。但是很不幸,服务器规定删除操作不能并发进行,我们只能在删除一个分类之后再删除另一个分类。
清单 7 展示了实现的示例。
清单 7. 串行处理 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
| dojo.require("dojox.lang.async");
function deleteSoftMusic() {
return dojo.xhrDelete({
url: "/music/softMusic",
handle: function(response) {
console.log(response);
}
});
}
function deleteFolkMusic() {
return dojo.xhrDelete({
url: "/music/folkMusic",
handle: function(response) {
console.log(response);
}
});
}
function deleteCountryMusic() {
return dojo.xhrDelete({
url: "/music/countryMusic",
handle: function(response) {
console.log(response);
}
});
}
var arrayOfAjax = [deleteSoftMusic, deleteFolkMusic, getCountryMusic];
dojox.lang.async.seq(arrayOfAjax)().allBoth(function(result) {
console.log(result);
});
|
当 dojox.lang.async.seq 管理的某一个 Ajax 请求失败了,排在其之后的 Ajax 请求将不再执行。并且 dojox.lang.async.seq 返回的 Deferred 对象会进入"rejected"状态。
总结通过以上的介绍和举例,我们了解了如何以 Dojo 作为工具,管理批量 Ajax 请求。Ajax 请求是一种异步操作,客户端无法知道这种异步操作什么时候返回,是否能成功返回。因此,批量处理 Ajax 请求的难点在于同时管理。本文讲述了一种结合 dojo.xhr 函数和 dojo.Deferred 对象的管理方式。用这种方式能够以多种方式管理批量 Ajax 请求,希望能为您的实际应用带来一定的启发。 |
|
|
|
|
|