首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Dojo 进行批量 Ajax 请求的多种处理方式(4)

使用 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 请求,希望能为您的实际应用带来一定的启发。
返回列表