??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
在用浏览器览|页的时候,当页面刷新很慢的时候,你的览器在q什么?你的屏幕内容是什么?是的Q你的浏览器在等待刷斎ͼ而你的屏q内Ҏ(gu)一片空白,而你在屏q前苦苦的等待浏览器的响应。开发h员ؓ(f)了克服这U尴的局面,不得不在每一个可能需要长旉{待响应的页面上增加一个DIVQ告诉用?#8220;pȝ正在处理(zhn)的hQ请E?#8230;…”?
现在Q有一U越来越行热?#8220;?#8221;技术,可以d改变q种H迫的局面。那是AJAX。如今,随着Gmail、Google-maps的应用和各种览器的支持QAJAX正逐渐吸引全世界的眼球?/p>
一、AJAX定义
AJAXQAsynchronous JavaScript and XMLQ其实是多种技术的l合Q包括Javascript、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest。其中:(x)
使用XHTML和CSS标准化呈玎ͼ使用DOM实现动态显C和交互Q用XML和XSTLq行数据交换与处理,使用XMLHttpRequest对象q行异步数据dQ用Javascriptl定和处理所有数据?/p>
在AJAX提出之前Q业界对于上q技术都只是单独的用,没有l合使用Q也是由于之前的技术需求所军_的。随着应用的广泛,AJAX也成为香饽饽了?/p>
二、现状与需要解决的问题
传统的Web应用采用同步交互q程Q这U情况下Q用户首先向HTTP服务器触发一个行为或h的呼求。反q来Q服务器执行某些dQ再向发求的用户q回一个HTML面。这是一U不q诏的用户体验,服务器在处理h的时候,用户多数旉处于{待的状态,屏幕内容也是一片空白。如下图Q?
自从采用文本作为Web传输和呈C后,我们都是采用q么一套传输方式。当负蝲比较?yu)的时候,qƈ不会(x)体现出有什么不妥。可是当负蝲比较大,响应旉要很长,1分钟?分钟……数分钟的时候,q种{待׃可忍受了。严重的Q超q响应时_(d)服务器干脆告诉你面不可用。另外,某些时候,我只是想改变面一部分的数据Q那Z么我必须重新加蝲整个面呢?Q当软g设计来讲Ih性化的时候,q么p糕的用户体验简直与q种原则背道而驰。ؓ(f)什么老是要让用户{待服务器取数据呢?臛_Q我们应该减用L(fng)待的旉。现在,除了E序设计、编码优化和服务器调优之外,q可以采用AJAX?/p>
三、ؓ(f)什么用AJAX
与传l的Web应用不同QAJAX采用异步交互q程。AJAX在用户与服务器之间引入一个中间媒介,从而消除了|络交互q程中的处理—等待—处理—等待缺炏V用L(fng)览器在执行d时即装蝲了AJAX引擎。AJAX引擎用JavaScript语言~写Q通常藏在一个隐藏的框架中。它负责~译用户界面及与服务器之间的交互。AJAX引擎允许用户与应用Y件之间的交互q程异步q行Q独立于用户与网l服务器间的交流。现在,可以用Javascript调用AJAX引擎来代替生一个HTTP的用户动作,内存中的数据~辑、页面导航、数据校验这些不需要重新蝲入整个页面的需求可以交lAJAX来执行?/p>
四、谁在用AJAX
在应用AJAX开发上面,Google当仁不让是表率。Orkut、Gmail、Google Groups、Google Maps、Google Suggest都应用了q项技术。Amazon的A9.com搜烦引擎也采用了cM的技术?
微Y也在U极开发更为完善的AJAX应用Q它卛_推出代号为Atlas的AJAX工具。Atlas的功能超了AJAX本nQ包括整合Visual Studio的调试功能。另外,新的ASP.NET控g客户端控件与服务器端代码的捆l更为简ѝAtlas客户脚本框架QAtlas Clent Script FrameworkQ也使与|页及相关项目的交互更ؓ(f)便利。但Visual Studio 2005中ƈ不包含此功能?/p>
微Y最q宣布Atlas客户脚本框架包含如下内容(详细资料误问Atlas计划|站Q:(x)
典型的,微YAJAX技术应用在MSN Space上面。很多h一直都对MS Space服务感到很奇怪,当提交回复评Z后,览器会(x)暂时停顿一下,然后在无h的情况下把我提交的评论显C出来。这个就是应用了AJAX的效果。试惻I如果d一个评论就要重新刷新整个页面,那可真费事?
目前QAJAX应用最普遍的领域是GIS-Map斚w。GIS的区域搜索强调快速响应,AJAX的特Ҏ(gu)好符合这U需求?/p>
五、用AJAX改进你的设计
AJAX虽然可以实现无刷新更新页面内容,但是也不是什么地斚w可以用,主要应用在交互较多、频J读数据、数据分c良好的Web应用中。现在,让我们D两个例子Q看看如何用AJAX改进你的设计?a>
例子1Q数据校?br />
在输入form表单内容的时候,我们通常需要确保数据的唯一性。因此,常常在页面上提供“唯一性校?#8221;按钮Q让用户点击Q打开一个校验小H口Q或者等form提交到服务器端,由服务器判断后在q回相应的校验信息。前者,window.open操作本来是比较耗费资源的,通常由window. showModalDialog代替Q即使这样也要弹Z个对话框Q后者,需要把整个面提交到服务器q由服务器判断校验,q个q程不仅旉长而且加重了服务器负担。而用AJAXQ这个校验请求可以由XMLHttpRequest对象发出Q整个过E不需要弹出新H口Q也不需要将整个面提交到服务器Q快速又不加重服务器负担?a>例子2Q按需取数据—联菜?br />
以前Qؓ(f)了避免每ơ对菜单的操作引L(fng)重蝲面Q不采用每次调用后台的方式,而是一ơ性将U联菜单的所有数据全部读取出来ƈ写入数组Q然后根据用L(fng)操作用JavaScript来控制它的子集项目的呈现Q这栯然解决了操作响应速度、不重蝲面以及避免向服务器频繁发送请求的问题Q但是如果用户不对菜单进行操作或只对菜单中的一部分q行操作的话Q那d的数据中的一部分׃(x)成ؓ(f)冗余数据而浪费用L(fng)资源Q特别是在菜单结构复杂、数据量大的情况下(比如菜单有很多、每一U菜又有上百个项目)Q这U弊端就更ؓ(f)H出?
现在应用AJAXQ在初始化页面时我们只读出它的第一U的所有数据ƈ昄Q在用户操作一U菜单其中一Ҏ(gu)Q会(x)通过Ajax向后台请求当前一U项目所属的二子菜单的所有数据,如果再l请求已l呈现的二菜单中的一Ҏ(gu)Q再向后面请求所操作二菜单对应的所有三U菜单的所有数据,以此cL……q样Q用什么就取什么、用多少取多少Q就不会(x)有数据的冗余和浪费,减少了数据下载总量Q而且更新面时不用重载全部内容,只更新需要更新的那部分即可,相对于后台处理ƈ重蝲的方式羃短了用户{待旉Q也把对资源的浪贚w到最低?/p>
例子3Q读取外部数?br /> AJAX可以调用外部数据Q因此,可以对一些开发的数据比如XML文、RSS文q行二次加工Q实现数据整合或者开发应用程序?/p>
AJAX不是完美的技术。用AJAXQ它的一些缺陷不得不权衡一下:(x)