﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-sugar-随笔分类-Ajax</title><link>http://www.cnitblog.com/sugar/category/1089.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 07:23:44 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 07:23:44 GMT</pubDate><ttl>60</ttl><item><title>Atlas 实现机制浅析 [1]</title><link>http://www.cnitblog.com/sugar/archive/2006/02/17/6662.html</link><dc:creator>sugar</dc:creator><author>sugar</author><pubDate>Fri, 17 Feb 2006 00:23:00 GMT</pubDate><guid>http://www.cnitblog.com/sugar/archive/2006/02/17/6662.html</guid><wfw:comment>http://www.cnitblog.com/sugar/comments/6662.html</wfw:comment><comments>http://www.cnitblog.com/sugar/archive/2006/02/17/6662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/sugar/comments/commentRss/6662.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/sugar/services/trackbacks/6662.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: [0]&#160;概述&#160;&#160;&#160;上周&#160;MS&#160;发布了面向&#160;ASP.NET&#160;的&#160;AJAX&#160;框架&#160;——&#160;Atlas&#160;最新&#160;CTP&#160;2006.1&#160;预览版,&#160;ScottGu&#160;在其&#160;blog&#160;上做了较为详细的介绍。New&#1...&nbsp;&nbsp;<a href='http://www.cnitblog.com/sugar/archive/2006/02/17/6662.html'>阅读全文</a><img src ="http://www.cnitblog.com/sugar/aggbug/6662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/sugar/" target="_blank">sugar</a> 2006-02-17 08:23 <a href="http://www.cnitblog.com/sugar/archive/2006/02/17/6662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax.net用户指南</title><link>http://www.cnitblog.com/sugar/archive/2006/02/16/6657.html</link><dc:creator>sugar</dc:creator><author>sugar</author><pubDate>Thu, 16 Feb 2006 08:59:00 GMT</pubDate><guid>http://www.cnitblog.com/sugar/archive/2006/02/16/6657.html</guid><wfw:comment>http://www.cnitblog.com/sugar/comments/6657.html</wfw:comment><comments>http://www.cnitblog.com/sugar/archive/2006/02/16/6657.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/sugar/comments/commentRss/6657.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/sugar/services/trackbacks/6657.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Ajax.net用户指南             程守华 译             概述             AJAX依靠服务器作为中介来分发和处理请求。为了完成这项工作，.net封装类依赖于客户端的请求对象，而xmlHttpRequest对象被大部分的浏览器支持，因此使用这个对象是一个不错的解决方案。因为封装的目的是隐藏xmlHttpRequest的实现，故我们不讨论他的实现细节。    ...&nbsp;&nbsp;<a href='http://www.cnitblog.com/sugar/archive/2006/02/16/6657.html'>阅读全文</a><img src ="http://www.cnitblog.com/sugar/aggbug/6657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/sugar/" target="_blank">sugar</a> 2006-02-16 16:59 <a href="http://www.cnitblog.com/sugar/archive/2006/02/16/6657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax：Web应用开发新理念</title><link>http://www.cnitblog.com/sugar/archive/2005/10/28/3616.html</link><dc:creator>sugar</dc:creator><author>sugar</author><pubDate>Fri, 28 Oct 2005 00:41:00 GMT</pubDate><guid>http://www.cnitblog.com/sugar/archive/2005/10/28/3616.html</guid><wfw:comment>http://www.cnitblog.com/sugar/comments/3616.html</wfw:comment><comments>http://www.cnitblog.com/sugar/archive/2005/10/28/3616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/sugar/comments/commentRss/3616.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/sugar/services/trackbacks/3616.html</trackback:ping><description><![CDATA[<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><FONT face=宋体><SPAN style="FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 125%">如果要用“充满魅力”一词来形容当前流行的交互设计，那么首推创建<SPAN lang=EN-US>Web</SPAN>应用程序。毕竟，当你最终听到某人倾倒于产品的交互设计，难道不是在网上？（<SPAN lang=EN-US>Okay</SPAN>，我承认<SPAN lang=EN-US>iPod</SPAN>除外）。所有追求酷，追求创新的新项目都是联机应用的。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 125%"><?xml:namespace prefix = o /><o:p></o:p></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%"><FONT face=宋体>尽管如此，<SPAN lang=EN-US>Web</SPAN>交互设计人员还是不可避免地对创建桌面应用软件的同事怀有一丝妒忌。桌面应用程序所拥有的功能丰富性和响应能力似乎是<SPAN lang=EN-US>Web</SPAN>目前无法达到的。简单地让<SPAN lang=EN-US>Web</SPAN>应用程序迅速蔓延，会在我们所提供的体验和用户从桌面应用程序获取的体验之间形成一道鸿沟。<SPAN lang=EN-US style="COLOR: black"><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%"><FONT face=宋体>但现在，这道鸿沟正被逐渐填平。让我们看看<SPAN lang=EN-US><A href="http://www.google.com/webhp?complete=1&amp;hl=en"><SPAN style="COLOR: windowtext">Google Suggest</SPAN></A></SPAN>。根据您输入的内容，相关的条目便几乎立即更新。我们再看<SPAN lang=EN-US><A href="http://maps.google.com/"><SPAN style="COLOR: windowtext">Google Maps</SPAN></A></SPAN>。利用光标，在刻度线上移动来放大地图或者缩小，所有的一切几乎都是即时的，完全不用等待页面的刷新。<SPAN lang=EN-US style="COLOR: black"><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Google Suggest</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">和<SPAN lang=EN-US>Google Maps</SPAN>就是这种新型<SPAN lang=EN-US>Web</SPAN>应用程序的两个例子，我在<SPAN lang=EN-US>Adaptive Path</SPAN>上把这种理念称为<SPAN lang=EN-US> Ajax</SPAN>。也就是<SPAN lang=EN-US>Asynchronous JavaScript + XML</SPAN>的简写，它预示着<SPAN lang=EN-US>Web</SPAN>可能发生一次重大的变革。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 125%"><o:p></o:p></SPAN></FONT></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">Ajax</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">的定义<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></B></FONT></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">Ajax</SPAN><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">并不是一种新技术，它实际上是几种已经在各自领域大行其道的技术的强强结合。<SPAN lang=EN-US>Ajax</SPAN>由以下内容组成：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 125%"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 31.5pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: Symbol"><SPAN>·<SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">基于标准化的<SPAN lang=EN-US>XHTML</SPAN>和<SPAN lang=EN-US>CSS</SPAN>；</SPAN><SPAN lang=EN-US style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P>
<UL type=disc>
<LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; COLOR: black; LINE-HEIGHT: 125%"><FONT size=3><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">通过<SPAN lang=EN-US>DOM</SPAN></SPAN><SPAN style="COLOR: windowtext; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">（<SPAN lang=EN-US><A href="http://www.scottandrew.com/weblog/articles/dom_1"><SPAN style="COLOR: windowtext">Document Object Model</SPAN></A></SPAN></SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">）实现动态显示和交互；</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></LI></UL>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 31.5pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: Symbol"><SPAN>·<SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">通过</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><A href="http://www-106.ibm.com/developerworks/xml/library/x-xslt/?article=xr"><SPAN style="COLOR: windowtext">XML</SPAN><SPAN lang=EN-US style="COLOR: windowtext"><SPAN lang=EN-US>和XSLT</SPAN></SPAN></A></SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">来进行数据交换和处理；</SPAN><SPAN lang=EN-US style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P>
<UL type=disc>
<LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; COLOR: black; LINE-HEIGHT: 125%"><FONT size=3><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">使用</SPAN><SPAN lang=EN-US style="COLOR: windowtext; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><A href="http://www.xml.com/pub/a/2005/02/09/xml-http-request.html"><SPAN style="COLOR: windowtext">XMLHttpRequest</SPAN></A></SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">通过异步方式获取数据；</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></LI></UL>
<UL type=disc>
<LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><SPAN style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><FONT size=3>使用<SPAN lang=EN-US>JavaScript</SPAN>来整合以上所有的技术<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></LI></UL>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">经典的<SPAN lang=EN-US>Web</SPAN>应用程序模型工作方式如下：大多数用户动作在界面上激发一个<SPAN lang=EN-US>HTTP</SPAN>请求到<SPAN lang=EN-US>web</SPAN>服务器。服务器做一些处理——获取数据，处理数字，与现有的应用系统进行沟通——最后返回<SPAN lang=EN-US>HTML</SPAN>到客户端。这样的模型适合于以超文本为基础的<SPAN lang=EN-US>Web</SPAN>应用程序，但作为一个强调用户体验的狂热分子（</SPAN><I><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><A href="http://www.jjg.net/elements/"><SPAN style="COLOR: windowtext">The Elements of User Experience</SPAN></A></SPAN></I><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">一书的拥护者），我们认为超文本造就<SPAN lang=EN-US>Web</SPAN>成功的东西，却并不一定满足软件应用程序的要求。</SPAN><SPAN lang=EN style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">传统的<SPAN lang=EN-US>Web</SPAN>应用程序模型技术上来说意义非凡，但它并不适用于创建完美的用户体验。当服务器在做数据处理的时候，用户在干什么呢？没错，他们在等待。一个任务所需的步骤越多，用户需要等待的次数也越多。</SPAN><SPAN lang=EN style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">显然，当我们设计<SPAN lang=EN-US>Web</SPAN>应用程序的时候，我们不应该让用户傻等。界面一旦加载完成，为什么还要因为程序需要从服务器传输一些东西而中断用户交互呢？实际上，用户为什么要看到程序与服务器的联系？</SPAN><SPAN lang=EN style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">为什么<SPAN lang=EN-US>Ajax</SPAN>与众不同</SPAN></B><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 125%"><o:p></o:p></SPAN></B></FONT></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Ajax</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">应用程序摒弃了“开—关—开—关”的交互形式，在用户与服务器之间引入了一个中间件——<SPAN lang=EN-US>Ajax</SPAN>引擎。看上去在应用程序上添加一个层面会减少响应，但事实上恰好相反。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">不同于加载一个网页是，用户会话一旦建立，浏览器就加载一个<SPAN lang=EN-US>Ajax</SPAN>引擎——由<SPAN lang=EN-US>JavaScript</SPAN>编写并通常放置在一个隐藏帧内。引擎的责任包括构造用户操作界面以及与服务器的沟通。<SPAN lang=EN-US>Ajax</SPAN>引擎允许用户与应用程序的交互异步进行——无须直接访问服务器。所以用户永远不会在服务器处理数据期间瞪眼面对一个白屏和沙漏图标。</SPAN><SPAN lang=EN style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><SPAN lang=EN style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p><FONT size=3>&nbsp;</FONT></o:p></SPAN></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>用户动作的处理由传统的表单提交来激发一个<SPAN lang=EN-US>HTTP</SPAN>请求，变为<SPAN lang=EN-US>Javascript</SPAN>调用<SPAN lang=EN-US>Ajax</SPAN>引擎。给用户的回应不用等到服务器处理后返回——比如简单的数据校验，在内存中编辑数据，甚至一些导航功能——都直接由引擎来处理。如果引擎需要从服务器获取些数据——提交数据给服务器处理，加载额外的界面代码，或者获取新数据——引擎通常以<SPAN lang=EN-US>XML</SPAN>格式激发一个异步的请求，用户端完全没有被中断的感觉。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 3pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><B><SPAN style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">谁在使用<SPAN lang=EN-US>Ajax</SPAN></SPAN></B><B><SPAN lang=EN style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></B></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><SPAN lang=EN-US style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Google</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">在<SPAN lang=EN-US>Ajax</SPAN>开发上投入了巨大的精力。去年<SPAN lang=EN-US>Google</SPAN>推出的几大产品</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">——</SPAN><SPAN lang=EN-US style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Orkut</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">、<SPAN lang=EN-US>Gmail</SPAN>、<SPAN lang=EN-US>Google Groups</SPAN>最终测试版</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><A href="http://www.google.com/webhp?complete=1&amp;hl=en"><SPAN style="COLOR: windowtext">Google Suggest</SPAN></A></SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">和</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><A href="http://maps.google.com/"><SPAN style="COLOR: windowtext">Google Maps</SPAN></A></SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">——</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">都是基于<SPAN lang=EN-US>Ajax</SPAN>的应用。其他还包括：有着很多备受人们赞誉特性的</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Flickr</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">（<SPAN lang=EN-US>http://www.flickr.com/</SPAN>）基于<SPAN lang=EN-US>Ajax</SPAN>，<SPAN lang=EN-US>Amazon</SPAN>的</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><A href="http://www.a9.com/"><SPAN style="COLOR: windowtext">A9.com</SPAN></A></SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">搜索引擎也使用了类似的技术。</SPAN><SPAN lang=EN style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>这些项目证实<SPAN lang=EN-US>Ajax</SPAN>并不是一个技术性的实验品，它可以实践在现实世界的应用中。它也不是一种只能在实验室中运用的技术。<SPAN lang=EN-US>Ajax</SPAN>适用于从简单的单函数<SPAN lang=EN-US>Google Suggest</SPAN>到非常复杂的<SPAN lang=EN-US>Google Maps</SPAN>等各种规模的应用程序。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>在<SPAN lang=EN-US>Adaptive Path</SPAN>，我们已经基于<SPAN lang=EN-US>Ajax</SPAN>的理念工作了好几个月，我们意识到我们也仅仅是接触到<SPAN lang=EN-US>Ajax</SPAN>所能带来的非凡体验的一点皮毛。<SPAN lang=EN-US>Ajax</SPAN>是<SPAN lang=EN-US>Web</SPAN>应用程序的一个重要发展，并且其重要性还在逐步增长。因为许多开发人员已经熟悉<SPAN lang=EN-US>Ajax</SPAN>所包含的技术，我们期望看到更多的组织能够像<SPAN lang=EN-US>Google</SPAN>那样通过<SPAN lang=EN-US>Ajax</SPAN>获得更大的竞争优势。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 3pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><B><SPAN style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">更进一步</SPAN></B><B><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></B></FONT></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>创建<SPAN lang=EN-US>Ajax</SPAN>应用程序所面临的最大挑战并不在技术上。<SPAN lang=EN-US>Ajax</SPAN>的核心技术是成熟的，稳定并被广泛应用着。这些挑战在于：应用设计人员忘掉所有我们所熟知的网络限制，去想像更宽广、更深远的可能情况。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>接下来会很有趣。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 3pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><A name=qanda></A><FONT size=3><?xml:namespace prefix = st1 /><st1:city w:st="on"><st1:place w:st="on"><SPAN><B><SPAN lang=EN style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Ajax</SPAN></B></SPAN></st1:place></st1:city><SPAN><B><SPAN lang=EN style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"> Q&amp;A<o:p></o:p></SPAN></B></SPAN></FONT></P><SPAN></SPAN>
<P style="TEXT-INDENT: 21pt; LINE-HEIGHT: 125%"><FONT face=宋体><st1:chsdate w:st="on" year="2005" month="3" day="13" islunardate="False" isrocdate="False"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">2005</SPAN><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">年<SPAN lang=EN-US>3</SPAN>月<SPAN lang=EN-US>13</SPAN>日</SPAN></st1:chsdate><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">：自从<SPAN lang=EN-US>Jesse</SPAN>发表了该文，他收到了不计其数的咨询<SPAN lang=EN-US>Ajax</SPAN>问题的信件，<SPAN lang=EN-US>Jesse</SPAN>回复了其中有代表性的问题并整理成<SPAN lang=EN-US>Q&amp;A</SPAN>。</SPAN><SPAN lang=EN style="FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 125%"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><B><SPAN lang=EN-US style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Q</SPAN></B><B><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">：</SPAN></B><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">是</SPAN><SPAN lang=EN-US style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Adaptive Path</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">还是<SPAN lang=EN-US>Google</SPAN>发明了<SPAN lang=EN-US>Ajax</SPAN></SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">？</SPAN><SPAN lang=EN-US style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Adaptive Path</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">是否协助开发了<SPAN lang=EN-US>Google</SPAN>的<SPAN lang=EN-US>Ajax</SPAN>应用程序</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">？</SPAN></FONT><SPAN lang=EN-US style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><BR><B><FONT size=3>A</FONT></B></SPAN><FONT size=3><B><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">：</SPAN></B><SPAN lang=EN-US style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Ajax</SPAN><SPAN style="COLOR: rgb(51,51,51); LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">并不是由<SPAN lang=EN-US>Adaptive Path</SPAN>或者<SPAN lang=EN-US>Google</SPAN>发明的。<SPAN lang=EN-US>Google</SPAN>最新的产品是<SPAN lang=EN-US>Ajax</SPAN>应用程序最具代表性的例子。<SPAN lang=EN-US>Adaptive Path</SPAN>没有参与<SPAN lang=EN-US>Google</SPAN>的开发，但我们在为其他的一些客户做一些与<SPAN lang=EN-US>Ajax</SPAN>相关的工作。</SPAN><SPAN lang=EN style="COLOR: black; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Adaptive Path</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">会出售<SPAN lang=EN-US>Ajax</SPAN>组件或者</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">注册<SPAN lang=EN-US>Ajax</SPAN>这个商标吗</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">？</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">我从哪里可以下载到它</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">？</SPAN></FONT><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Ajax</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">并不是一个具体的软件或程序，它是一种理念——关于用合理的技术构建<SPAN lang=EN-US>Web</SPAN>应用程序架构的思考。<SPAN lang=EN-US>Ajax</SPAN>这个名称和它的理念都不是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Adaptive Path</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">私有的。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Ajax</SPAN></FONT><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>只不过是<SPAN lang=EN-US>XMLHttpRequest</SPAN>的别名吗？</FONT><SPAN lang=EN-US><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B>：</B>不是。<SPAN lang=EN-US>XMLHttpRequest</SPAN>只是<SPAN lang=EN-US>Ajax</SPAN>的一个组成部分。<SPAN lang=EN-US>XMLHttpRequest</SPAN>让客户端与服务器的异步通讯成为可能；<SPAN lang=EN-US>Ajax</SPAN>是本文描述的一个整体理念，它不仅依赖于<SPAN lang=EN-US>XMLHttpRequest</SPAN>，还包括<SPAN lang=EN-US>CSS</SPAN>、<SPAN lang=EN-US>DOM</SPAN>和其他技术等等。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B></FONT><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>为什么你会起这么个名字？</FONT><SPAN lang=EN-US><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B>：</B>我们需要一个简短的表示“<SPAN lang=EN-US>Asynchronous JavaScript+CSS+DOM+XMLHttpRequest</SPAN>”的新词来与客户谈我们的理念。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">与服务器</SPAN></FONT><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>异步通讯的技术产生很多年了，<SPAN lang=EN-US>Ajax</SPAN>何以称为新理念？</FONT><SPAN lang=EN-US><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B>：</B><SPAN lang=EN-US>Ajax</SPAN><SPAN>包含的</SPAN>技术被大量应用在现实世界中以至于改变了<SPAN lang=EN-US>Web</SPAN>的基础交互模式是一个新现象。<SPAN lang=EN-US>Ajax</SPAN>是针对现在而言，因为这些技术离工业化应用还需要很多时间去开发。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Ajax</SPAN></FONT><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>是一个技术平台或者架构吗？</FONT><SPAN lang=EN-US><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B>：</B>都是。<SPAN lang=EN-US>Ajax</SPAN>是一系列技术的无缝集合。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Ajax</SPAN></FONT><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>最适合于什么样的应用？</FONT><SPAN lang=EN-US><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B>：</B>我也不知道。因为这是一个相当新的理念，就我们的理解而言，<SPAN lang=EN-US>Ajax</SPAN>应用还处于初期阶段。有时候传统的<SPAN lang=EN-US>Web</SPAN>应用程序模型可能更为适合。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">：</SPAN></B><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">是否可以理解为<SPAN lang=EN-US>Adaptive Path</SPAN>就是取代<SPAN lang=EN-US>anti-Flash</SPAN></SPAN><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">？</SPAN></FONT><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%"><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">：</SPAN></B><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">完全不是。<SPAN lang=EN-US>Macromedia</SPAN>是<SPAN lang=EN-US>Adaptive Path</SPAN>的客户之一，并且我们长期为<SPAN lang=EN-US>Flash</SPAN>技术做技术支持。待<SPAN lang=EN-US>Ajax</SPAN>成熟后，我认为对于具体的问题，<SPAN lang=EN-US>Ajax</SPAN>有时候会是一个更好的解决方案，同样有时候<SPAN lang=EN-US>Flash</SPAN>也许做得更好。我们也有兴趣探讨两者的结合。（比如<SPAN lang=EN-US>Flickr</SPAN>，它结合了两者）。</SPAN><SPAN lang=EN style="FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 125%"><o:p></o:p></SPAN></FONT></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Ajax</SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">在易用性和浏览器兼容性上是否有限制</SPAN></FONT><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>？<SPAN lang=EN-US>Ajax</SPAN>是否会与后退按钮冲突？<SPAN lang=EN-US>Ajax</SPAN>与<SPAN lang=EN-US>REST</SPAN>（雷达电子扫描技术）兼容吗？<SPAN lang=EN-US>Ajax</SPAN>的开发有哪些安全考虑？<SPAN lang=EN-US>Ajax</SPAN>能为那些禁止<SPAN lang=EN-US>Javascript</SPAN>运行的用户工作吗？</FONT><SPAN lang=EN-US><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B>：</B><SPAN>所有</SPAN>这些问题的答案，我只能说“可能”。已经有很多的开发者着手这些方面的工作。要评估<SPAN lang=EN-US>Ajax</SPAN>的所有限制，我想还需要做很多工作，我们希望<SPAN lang=EN-US>Ajax</SPAN>开发社区能揭示更多的信息。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="LINE-HEIGHT: 125%"><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">Q</SPAN></B><B><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%">：</SPAN></B></FONT><SPAN style="FONT-SIZE: 10.5pt; COLOR: rgb(51,51,51); LINE-HEIGHT: 125%"><FONT face=宋体>你所提到的<SPAN lang=EN-US>Google</SPAN>的一些应用中实际上并没有使用<SPAN lang=EN-US>XML</SPAN>。我一定要在<SPAN lang=EN-US>Ajax</SPAN>应用中使用<SPAN lang=EN-US>XML</SPAN>或<SPAN lang=EN-US>XSLT</SPAN>吗？</FONT><SPAN lang=EN-US><BR><B><FONT face=宋体>A</FONT></B></SPAN><FONT face=宋体><B>：</B><SPAN>不是，对于<SPAN lang=EN-US>Ajax</SPAN>客户端，<SPAN lang=EN-US>XML</SPAN>作为数据交换的载体是支持最为完善的（<SPAN lang=EN-US>XMLHttpRequest</SPAN>，<SPAN lang=EN-US>DOM</SPAN>支持）。当然，你没有理由不接受可以达到同样效果的技术，例如</SPAN></FONT></SPAN><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">JavaScript Object Notation</SPAN><SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 125%">（<SPAN lang=EN-US>http://www.crockford.com/JSON/</SPAN>）<SPAN style="COLOR: rgb(51,51,51)">或者其他类似的数据交换的格式。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; LINE-HEIGHT: 125%; TEXT-ALIGN: left" align=left><FONT size=3><B><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Q</SPAN></B><B><SPAN style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">：</SPAN></B><SPAN lang=EN-US style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体">Ajax</SPAN></FONT><SPAN style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体"><FONT size=3>应用比传统的<SPAN lang=EN-US>Web</SPAN>应用程序方便开发吗？</FONT><SPAN lang=EN-US><BR><B><FONT size=3>A</FONT></B></SPAN><FONT size=3><B>：</B>也不尽然。<SPAN lang=EN-US>Ajax</SPAN>的应用不可避免要在客户端运行复杂的<SPAN lang=EN-US>JavaScript</SPAN>脚本。编写复杂并且高效稳定的脚本并不是一件容易的事情，优秀的开发工具和框架能帮助我们接受这一挑战。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="LINE-HEIGHT: 125%"><FONT size=3><FONT face=宋体><B><SPAN lang=EN-US>Q</SPAN>：</B><SPAN lang=EN-US>Ajax</SPAN>应用程序总比传统的<SPAN lang=EN-US>Web</SPAN>应用程序程序更友好吗？</FONT></FONT><SPAN lang=EN-US><BR><B><FONT face=宋体 size=3>A</FONT></B></SPAN><FONT size=3><FONT face=宋体><B>：</B>不一定，<SPAN lang=EN-US>Ajax</SPAN>给交互设计人员更多的灵活性。能力越大，责任也越大。我们必须小心使用<SPAN lang=EN-US>Ajax</SPAN>去改善用户体验，而不是把它弄得更糟。</FONT></FONT></P><img src ="http://www.cnitblog.com/sugar/aggbug/3616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/sugar/" target="_blank">sugar</a> 2005-10-28 08:41 <a href="http://www.cnitblog.com/sugar/archive/2005/10/28/3616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Ajax的挑战</title><link>http://www.cnitblog.com/sugar/archive/2005/10/28/3615.html</link><dc:creator>sugar</dc:creator><author>sugar</author><pubDate>Fri, 28 Oct 2005 00:40:00 GMT</pubDate><guid>http://www.cnitblog.com/sugar/archive/2005/10/28/3615.html</guid><wfw:comment>http://www.cnitblog.com/sugar/comments/3615.html</wfw:comment><comments>http://www.cnitblog.com/sugar/archive/2005/10/28/3615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/sugar/comments/commentRss/3615.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/sugar/services/trackbacks/3615.html</trackback:ping><description><![CDATA[<P>与任何技术一样，使用Ajax在相当多的方面都可能范错误。我在这儿讨论的问题目前都缺少解决方案，并将会随着Ajax的成熟而解决或提高。随着开发Ajax应用经验的不断获取，开发者社区中将会出现最好的实践经验与指导方针。</P>
<P>　　1、XMLHttpRequest的有效性</P>
<P>　　Ajax开发者面对的一个最大问题是当XMLHttpRequest不可用时如何反应。虽然大部分现代浏览器支持 XMLHttpRequest，但还是有少量的用户，他们的浏览器不能支持，或由于浏览器安全设置而阻止对XMLHttpRequest的使用。若你的 Web应用发布于公司内部的Intranet上，你很可能可以指定支持哪种浏览器，并可以确保XMLHttpRequest是可用的。若你在公共WEB上发布，则你必须意识到由于假定XMLHttpRequest是可用的，所有就阻止了老浏览器、手持设备浏览器等等用户来使用你的系统。</P>
<P>　　然而，你应该尽力保证应用系统“正常降级”使用，在系统中保留适用于不支持XMLHttpRequest的浏览器的功能。在购物车例子中，最好的方法是有一个Add to Cart按钮，可以进行常规的提交处理，并刷新页面来反映购物车状态的变化。Ajax行卫可以在页面被载入时通过JavaScript添加到页面中，只在 XMLHttpRequest可用的情况下，为每个Add to Cart按钮加上JavaScript处理函数。另一个方法是在用户登录时检测XMLHttpRequest，再决定是提供Ajax版本还是常规基于 form提交的版本。</P>
<P>　　2、可用性考虑</P>
<P>　　围绕着Ajax应用的大部分问题都是很普通的问题。例如，让用户知道他们的输入已经被注册并处理，是很重要的，因为在 XMLHttpRequest处理过程中并不能提供通常的漏斗旋转光标。一种方法是将“确认”按扭上的文本替换为“正在更新中…”，以避免用户在等待响应时多次点击按钮。</P>
<P>　　另一个问题是，用户可能没有注意到他们正在观看的页面已经被更新。可以通过使用各种视觉技巧来将用户的眼光吸引到页面的更新区域。还有一个问题是通过Ajax更新页面打断了浏览器“退回前页”按钮的正常工作，地址栏中的URL不能反映页面的全部状态，并且不能使用书签功能。参见Resource 章节中列出的网站地址上的文章来了解更多Ajax应用关于可用性方面的问题。</P>
<P>　　3、服务器负载</P>
<P>　　使用Ajax界面代替传统的基于form的界面可能戏剧性地增加传递到服务器的请求数量。例如，一个普通的Google搜索给服务器造成一次命中，并在用户确认搜索表单时发生。然而，Google Suggest，将会试图自动完成你的搜索词，在用户打字时将会往服务器发送多个请求。在开发一个Ajax应用时，要注意到你将会发送多少请求到用户器端，以及服务器的负载指标。你可以通过在客户端适当地缓存请求、与服务器响应来缓减负载压力。你也应该在设计Ajax应用时尽量在客户端处理更多的逻辑，而不用与服务器端通讯。</P>
<P>　　4、处理异步</P>
<P>　　一定要记住，没有任何东西可以保证XMLHttpRequest将会按照它们被发送的顺序来依次结束。实际上，你在设计系统时，脑子里应该始终假定它们不会按原来顺序结束。在购物车例子中，使用了一个最后更新的时间戳来保证最新的数据不会被改写。这个非常基本的方法可以在购物车场景中工作，但可能不能在其它情况下工作。在设计时刻就要考虑你该如何处理异步服务器响应。</P>
<P>　　结论</P>
<P>　　你现在应该对于Ajax的基本原则有了一个良好的了解，另外，你应该理解一些更高级的随Ajax方法而来的设计问题。创建一个成功的Ajax应用需要一系列的方法—从JavaScript UI设计到服务器端架构—但是你现在应该已经具备了需要使用到的Ajax核心知识。</P><img src ="http://www.cnitblog.com/sugar/aggbug/3615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/sugar/" target="_blank">sugar</a> 2005-10-28 08:40 <a href="http://www.cnitblog.com/sugar/archive/2005/10/28/3615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>