用Dojo实现复杂的Ajax请求

Dojo 作为一个强大的前端框架,能够让开发者很从容的应对这些挑战。本文将以 Dojo 作为工具,详细介绍面对不同的">业务需求,如何处理批量的 Ajax 请求。

在阅读本文之前,您需要具备以下知识:

Ajax 技术:Ajax 的英文全名是:Asynchronous JavaScript and XML,从名字可以看出 Ajax 是一种异步的与服务器业务交互的方式。通常,在浏览器内运行的 JavaScript 代码都是单线程的。Ajax 的异步交互方式使得前台的 JavaScript 程序不会阻塞在等待服务器响应的过程中。从而使前台程序能够一直保持激活和响应性。有关 Ajax 的内容请参考 Ajax 技术资源中心。 Dojo 框架:Dojo 是一个强大的前端框架,它提供了方便的 Ajax 方法、
丰富的小部件、数据结构、辅助函数、效果和布局帮助。有关 Dojo 的详细介绍请参考 Dojo 技术专题。 XMLHttpRequest 对象:这是一个 JavaScript 对象,用于向服务器发送请求和接收服务器的响应。详细介绍请参考相关资源。 异步编程模式:这种模式在 web 编程中变得越来越重要,通常用于执行时间可能较长的操作。异步编程模式不会等待
长时间的操作完成或是造成阻塞,
而是立即返回一个代表该操作的对象。操作成功或者失败之后会调用事先对该对象注册的回调函数。有关异步编程模式在 web 编程中的应用请参考相关资源。 并发和串行 Ajax 请求:顾名思义,并发 Ajax 请求是指客户端同时发送多个 Ajax 请求至
服务器端;串行 Ajax 请求是指客户端在一个 Ajax 请求返回之后再发送下一个 Ajax 请求。

Dojo 的应用将贯穿本文,选择 Dojo 的主要原因有以下两点:

Dojo 提供了专门用于异步编程模式的对象:dojo.Deferred。并且提供了很多进一步操作 Deferred 对象的机制和方法。通过这些机制和方法能够方便的管理多个 dojo.Deferred 对象。 Dojo 封装了一些静态函数(dojo.xhr 函数)使得开发人员能够很简单的触发 Ajax 请求。同时,dojo.xhr 函数返回一个 Deferred 对象用于进行异步编程操作。

基于上述内容,本文的主要内容可以归纳如下:

描述 dojo.xhr 函数的使用、如何将其应用于异步编程模式和如何利用异步编程模式实现小规模的批量 Ajax 请求管理 详细介绍用 dojo.DeferredList 和 dojox.lang.async.par 实现任意规模的并发 Ajax 请求 详细介绍用 dojox.lang.async.seq 实现任意规模的串行 Ajax 请求

准备工作

服务器端业务描述

由于本文主要讨论客户端实现 Ajax 请求。在此不介绍服务器端的实现方式,并且认为服务器已经实现了所有我们需要的功能,仅以最简单的方式描述服务器端的业务。

让我们用一个示例来说明,图 1 展示了服务器与客户端的交互。

图 1. 客户端与服务器端数据交互示

图 1. 客户端与服务器端数据交互示例

现在在服务器端有一个音乐管理系统,里面的音乐按照风格进行分类。服务器提供两类 REST 服务:

/music/{categoryOf
Music} 返回某一个分类的所有歌曲的概要信息 /music/{nameOfSong} 返回某一首歌曲的详细信息

客户端与服务器端的数据以 JSON 格式进行交互。

准备开发环境和调试工具

下载并安装 Firefox 浏览器,并安装 Firebug 插件。

时间: 2024-12-26 11:03:40

用Dojo实现复杂的Ajax请求的相关文章

用Dojo实现Ajax请求:XH“.NET研究”R、跨域、及其他

在任何浏览器上方便地实现Ajax请求是每一个Ajax框架的初衷.Dojo在这方面无疑提供了非常丰富的支持.除了XMLHttpRequest之外,动态script.iframe.RPC也应有尽有,并且接口统一,使用方便,大多数情况下都只需要一句话就能达到目的,从而免除重复造轮子的麻烦.而且,Dojo一贯追求的概念完整性也在这里有所体现,换句话说,在使用Dojo的Ajax工具的过程中不会感到任何的不自然,相反更容易有触类旁通的感觉,因为API的模式是统一的,而且这里涉及到的某些概念(如Deferre

一起谈.NET技术,用Dojo实现Ajax请求:XHR、跨域、及其他

在任何浏览器上方便地实现Ajax请求是每一个Ajax框架的初衷.Dojo在这方面无疑提供了非常丰富的支持.除了XMLHttpRequest之外,动态script.iframe.RPC也应有尽有,并且接口统一,使用方便,大多数情况下都只需要一句话就能达到目的,从而免除重复造轮子的麻烦.而且,Dojo一贯追求的概念完整性也在这里有所体现,换句话说,在使用Dojo的Ajax工具的过程中不会感到任何的不自然,相反更容易有触类旁通的感觉,因为API的模式是统一的,而且这里涉及到的某些概念(如Deferre

PHP中检测ajax请求的代码例子

  多数情况下,基于JavaScript 的Js框架如jquery.Mootools.Prototype等,在发出Ajax请求指令时,都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息,就当是一个ajax请求,因此你可以在服务器端检测到这些Ajax请求,在PHP中的检测方法如下代码所示: 1 2if(!emptyempty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED

一个简单的AJAX请求类

ajax|请求   在给blog加上无刷新搜索和即时验证检测后,又看了下代码,感觉太过麻烦,就把XMLHttpRequest请求封装到一个类里面,用起来方便多了,不用记那么多代码,什么创建XMLHttpRequest对象什么的,这部分代码也是重用性比较高的-已经打包,在日志的末尾下载. 要看效果的话点开侧边栏里的日志搜索,里面有一个无刷新搜索,就是了,或者在阅读日志或留言簿里的注册码那里有即时检测,如果不输入验证码或者输错了验证码,输入框都会变红的' 类名:AJAXRequest 创建方法:va

请慎用Ajax请求来探测不存在的资源

ajax|请求 引     不知道各位有几个还记得Apress的<Foundations.of.Ajax>中描述的HEAD请求的pattern? 是的,你可以利用XHR向一个你并不知道在与不在的资源发送请求,从而探测期的存在,做出相应的判断处理.其实发送任何GET请求也可以,只不过一般认为HEAD请求比较轻量级,比较容易使用而已. 但实际上是这样子吗? 案例     在技术上我是比较激进的一派,还保持着热血青年的特性.所以,在当时新需求到来时,为了印证新技术的可行性,我冒险采用了XHR的HEA

jquey的ajax请求返回json问题

如果使用jquery的ajax请求,返回json格式的数据,json的键必须使用双引号,否则无法执行回调方法.

PHP判断一个请求是AJAX请求还是普通请求

在PHP程序中,如何判断一个网页请求是ajax请求还是普通请求?我们在做项目中经常会存在这样一个问题,在浏览器中直接输入我ajax提交的地址后,浏览器就能直接请求数据并将数据打印到页面上.从程序的严谨性上和安全上来说,我觉得这样非常不好. 但是由于水平有限,这个问题直到今天才被我解决,特此留下文章以供有此需要的人学习. 首先说说原理:在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的header头信息,如果您使用的是原生的ajax方法,也就是未使用jquer

JavaScript框架:跨浏览器的标准化Ajax请求

Ajax 使用JavaScript框架最令人信服的理由是跨浏览器的标准化Ajax请求.Ajax请求是异步的HTTP请求,向服务器端脚本发送请求,然后得到一个响应结果,如如XML.JSON.HTML.纯文本格式的数据.大多数JavaScript框架有一定形式的Ajax请求对象,它接受一系列选项作为参数.这些选项包括回调函数,在得到Web服务器的响应时调用,ExtJS.MooTools和Prototype的Ajax请求看起来是这样的: 清单11:一个ExtJS 库中的Ajax请求 Ext.Ajax.

在php中判断一个请求是ajax请求还是普通请求的方法

/path/to/pkphp.com/script.php?ajax 在php脚本中使用如下方法判断: 复制代码 代码如下: if(isset($_GET['ajax'])) { ...这是一个ajax请求,然后... } else { ...这不是一个ajax请求,然后... } 通过传递_GET参数的方法简单实现了网页请求的判断.但是如果需要这样的功能,这个方法可能就有弊端,功能需求如下: 1.通过ajax请求的网页与普通请求的网页内容是不相同的 2.通过ajax请求的网页是为了方便用户操作