﻿<?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>BlogJava-iNeo-随笔分类-Ajax</title><link>http://www.blogjava.net/iNeo/category/5584.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:34:20 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:34:20 GMT</pubDate><ttl>60</ttl><item><title>AJAX：开发者新的一天[转]</title><link>http://www.blogjava.net/iNeo/archive/2006/01/04/26524.html</link><dc:creator>只牵这只狗</dc:creator><author>只牵这只狗</author><pubDate>Wed, 04 Jan 2006 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/iNeo/archive/2006/01/04/26524.html</guid><wfw:comment>http://www.blogjava.net/iNeo/comments/26524.html</wfw:comment><comments>http://www.blogjava.net/iNeo/archive/2006/01/04/26524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iNeo/comments/commentRss/26524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iNeo/services/trackbacks/26524.html</trackback:ping><description><![CDATA[<P><STRONG>摘要:</STRONG></P>
<DIV class=summary>
<DIV class=center>虽然大部分开发人员在过去使用过XMLHttp或者使用Iframe来加载数据，但仅到现在我们才看到传统的开发人员和公司开始采用这些技术。就像新的编程语言或模型伴随着更多的痛苦，开发人员需要学习新的技巧及如何最好利用这些新技术。这篇文章讲述了开发人员使用AJAX需要使用的工具和技术。 </DIV>
<DIV class=right>
<DIV class=help>
<H4>文章工具</H4></DIV></DIV></DIV>
<DIV class=overflow id=text>
<P>作者:Andrew Thompson;<A href="http://www.matrix.org.cn/user.shtml?username=xMatrix" target=_new><FONT color=#00659c>xMatrix</FONT></A>&nbsp;(他的blog：<A href="http://blog.matrix.org.cn/page/xMatrix">http://blog.matrix.org.cn/page/xMatrix</A>)<BR>原文地址:<A href="http://www.javaworld.com/javaworld/jw-10-2005/jw-1017-ajax.html">http://www.javaworld.com/javaworld/jw-10-2005/jw-1017-ajax.html</A><BR>中文地址:<A href="http://www.matrix.org.cn/resource/article/44/44116_AJAX.html">http://www.matrix.org.cn/resource/article/44/44116_AJAX.html<FONT color=#00659c></FONT></A><BR>关键词： AJAX<BR><BR><FONT size=4><STRONG>AJAX开发者的最新工具和技术</STRONG></FONT><BR><BR>基于XML的异步JavaScript，简称AJAX，是当前Web创新（称为Web2.0）中的一个王冠。感谢组成AJAX的各种技术，Web应用的交互如Flickr, Backpack和Google在这方面已经有质的飞跃。这个术语源自描述从基于网页的Web应用到基于数据的应用的转换。在基于数据的应用中，用户需求的数据如联系人列表，可以从独立于实际网页的服务端取得并且可以被动态地写入网页中，给缓慢的Web应用体验着色使之像桌面应用一样。<BR><BR>虽然大部分开发人员在过去使用过XMLHttp或者使用Iframe来加载数据，但仅到现在我们才看到传统的开发人员和公司开始采用这些技术。就像新的编程语言或模型伴随着更多的痛苦，开发人员需要学习新的技巧及如何最好利用这些新技术。这篇文章讲述了开发人员使用AJAX枰褂玫墓ぞ吆图际酢?lt;br /&gt;<BR><FONT size=4><STRONG>AJAX模式<BR></STRONG></FONT>许多重要的技术和AJAX开发模式可以从现有的知识中获取。例如，在一个发送请求到服务端的应用中，必须包含请求顺序、优先级、超时响应、错误处理及回调，其中许多元素已经在Web服务中包含了，就像现在的SOA。AJAX开发人员拥有一个完整的系统架构知识。同时，随着技术的成熟还会有许多地方需要改进，特别是UI部分的易用性。<BR><BR>AJAX开发与传统的CS开发有很大的不同。这些不同引入了新的编程问题，最大的问题在于易用性。由于AJAX依赖浏览器的JavaScript和XML，浏览器的兼容性和支持的标准也变得和JavaScript的运行时性能一样重要了。这些问题中的大部分来源于浏览器、服务器和技术的组合，因此必须理解如何才能最好的使用这些技术。<BR><BR>综合各种变化的技术和强耦合的客户服务端环境，AJAX提出了一种新的开发方式。AJAX开发人员必须理解传统的MVC架构，这限制了应用层次之间的边界。同时，开发人员还需要考虑CS环境的外部和使用AJAX技术来重定型MVC边界。最重要的是，AJAX开发人员必须禁止以页面集合的方式来考虑Web应用而需要将其认为是单个页面。一旦UI设计与服务架构之间的范围被严格区分开来后，开发人员就需要更新和变化的技术集合了。<BR><BR><BR><FONT size=4><STRONG>时刻想着用户</STRONG></FONT><BR>AJAX的最大机遇在于用户体验。在使应用更快响应和创新的过程中，定义Web应用的规则正在被重写；因此开发人员必须更注重用户。现在用户已经逐渐习惯如何使用Web应用了。例如用户通常希望每一次按钮点击会导致几秒的延迟和屏幕刷新，但AJAX正在打破这种长时间的状况。因此用户需要重新体验按钮点击的响应了。<BR><BR>可用性是AJAX另人激动的地方而且已经产生了几种新颖的技术。其中最引人注目的是一种称为“黄色隐出”的技术，他在数据更新之前时将用户界面变为黄色，更新完成后立刻恢复原来的颜色。AJAX开发人员将用户从Web应用的负载中解放出来；小心地利用AJAX提供的丰富接口，不久桌面开发人员会发现AJAX是他们的方向。<BR><BR><BR><FONT size=4><STRONG>几种工具和技术</STRONG></FONT><BR>随着AJAX迅速地引人注目起来，我想开发人员对这种技术的期待也迅速地增加。就像任何新技术，AJAX的兴旺也需要一整个开发工具/编程语言及相关技术系统来支撑。<BR><BR><STRONG>JavaScript</STRONG><BR>如名字所示AJAX的概念中最重要而最被忽视的是他也是一种JavaScript编程语言。JavaScript是一种粘合剂使AJAX应用的各部分集成在一起。在大部分时间，JavaScript通常被服务端开发人员认为是一种企业级应用不需要使用的东西应该尽力避免。这种观点来来自以前编写JavaScript代码的经历：繁杂而又易出错的语言。类似的，他也被认为将应用逻辑任意地散布在服务端和客户端中，这使得问题很难被发现而且代码很难重用。在AJAX中JavaScript主要被用来传递用户界面上的数据到服务端并返回结果。XMLHttpRequest对象用来响应通过HTTP传递的数据，一旦数据返回到客户端就可以立刻使用DOM将数据放到网面上。<BR><BR><STRONG>XMLHttpRequest</STRONG><BR>XMLHttpRequest对象在大部分浏览器上已经实现而且拥有一个简单的接口允许数据从客户端传递到服务端，但并不会打断用户当前的操作。使用XMLHttpRequest传送的数据可以是任何格式，虽然从名字上建议是XML格式的数据。<BR><BR>开发人员应该已经熟悉了许多其他XML相关的技术。XPath可以访问XML文档中的数据，但理解XML DOM是必须的。类似的，XSLT是最简单而快速的从XML数据生成HTML或XML的方式。许多开发人员已经熟悉Xpath和XSLT，因此AJAX选择XML作为数据交换格式有意义的。XSLT可以被用在客户端和服务端，他能够减少大量的用JavaScript编写的应用逻辑。<BR><BR><STRONG>CSS</STRONG><BR>为了正确的浏览AJAX应用，CSS是一种AJAX开发人员所需要的重要武器。CSS提供了从内容中分离应用样式和设计的机制。虽然CSS在AJAX应用中扮演至关重要的角色，但他也是构建创建跨浏览器应用的一大阻碍，因为不同的浏览器厂商支持各种不同的CSS级别。<BR><BR><STRONG>服务器端</STRONG><BR>但不像在客户端，在服务端AJAX应用还是使用建立在如Java,.Net和PHP语言基础上机制；并没有改变这个领域中的主要方式。<BR>既然如此，我们对Ruby on Rails框架的兴趣也就迅速增加了。在一年多前，Ruby on Rails已经吸引了大量开发人员基于其强大功能来构建Web和AJAX应用。虽然目前还有很多快速应用开发工具存在，Ruby on Rails看起来已经储备了简化构建AJAX应用的能力。<BR><BR><STRONG>开发工具<BR></STRONG>在实际构建AJAX应用中，你需要的不只是文本编辑器。既然是JavaScript非编译的，他可以容易地编写和运行在浏览器中；然而，许多工具提供了有用的扩展如语法高亮和智能完成。<BR><BR>不同的IDE提供了对JavaScript支持的不同等级。来自JetBrains的IntelliJ IDEA是一个用来JavaScript开发的更好的IDE，虽然许多开发人员也喜欢Microsoft’s Visual Studio产品（允诺会在最新的版本中改善对AJAX的支持）。Eclipse包含了两个免费的JavaScript编辑器插件和一个商业的来自ActiveStat的Komodo IDE。<BR><BR>另一个JavaScript和AJAX开发中的问题是调试困难。不同的浏览器提供不同的通常是隐藏的运行时错误信息，而JavaScript的缺陷如双重变量赋值（通常是由于缺少数据类型）使得调试更加困难。在AJAX的开发中，调试就更复杂了，因为其需要标识究竟是客户端还是服务端产生的错误。在过去，JavaScript调试的方法是删除所有代码然后一行行的增加直到错误出现。现在，更多开发人员回到为IE准备的Microsoft Script Debugger和为Mozilla浏览器准备的Venkman。<BR><BR><BR><FONT size=4><STRONG>浏览器兼容性</STRONG></FONT><BR>JavaScript编程的最大问题来自不同的浏览器对各种技术和标准的支持。构建一个运行在不同浏览器（如IE和火狐）是一个困难的任务。因此几种AJAX JavaScript框架或者生成基于服务端逻辑或标记库的JavaScript，或者提供符合跨浏览器AJAX开发的客户端JavaScript库。一些流行的框架包括：AJAX.Net, Backbase, Bitkraft, Django, DOJO, DWR, MochiKit, Prototype, Rico, Sajax, Sarissa, and Script.aculo.us. <BR><BR>这些框架给开发人员更多的空间使得他们不需要担心跨浏览器的问题。虽然这些框架提升了开发人员构建应用的能力，但由于厂商已经开发了更细节的用户界面的打包组件解决方案，因此在AJAX组件市场中需要考虑一些其他因素。例如提供通用用户界面的组件如组合框和数据栅格的几个厂商，都可以被用来在应用中创建良好的通过类似电子数据表方式来查看和编辑数据的体验。但这些组件不仅是封装了组件的用户界面而且包括与服务端数据的通讯方式，这些组件通常使用基于标记方式来实现如ASP.Net或JSF控件。</P>
<P><BR><FONT size=4><STRONG>展望<BR></STRONG></FONT>最近IE和火狐之间的浏览器之争变得火热起来，因此AJAX开发人员需要足够敏捷的作出反应。关键点在一些问题如CSS或XML，虽然各种浏览器形成采用最新标准的不同阵营（如Mozilla拥抱SVG和E4X标准及在最新火狐BETA版本中使用XUL，而微软使用自己的XAML技术）。所有这些技术代表当前AJAX主流JavaScript和XML的市场方向改变。<BR>总的来说，AJAX开发人员必须尽快地跟进最新的技术并利用高产的工具集。成功的AJAX开发人员还需要留心他们的使用者以避免将任何问题扩大化。并且AJAX开发人员还需要持续地创新来创建增强Web应用易用性的新方法。</P>
<P><BR><FONT size=4><STRONG>作者</STRONG></FONT><BR>Dave Johnson是加拿大Vancouver一家软件咨询公司eBusiness Applications创始人和传道者，拥有七年以上的XML相关工作经验。</P>
<P><BR><FONT size=4><STRONG>Resources</STRONG></FONT> <BR>•&nbsp;AJAX开发人员的编译模式:<A href="http://www.ajaxpatterns.org/">http://www.ajaxpatterns.org</A> <BR>•&nbsp; XMLHttpRequest教程：“动态网页接口”:<A href="http://www.xml.com/pub/a/2005/02/09/xml-http-request.html">http://www.xml.com/pub/a/2005/02/09/xml-http-request.html</A> <BR>•&nbsp;JavaScript性能基准:<A href="http://blogs.ebusiness-apps.com/dave/?p=14">http://blogs.ebusiness-apps.com/dave/?p=14</A> <BR>•&nbsp;AJAX资源:<A href="http://www.ajaxmatters.com/">http://www.ajaxmatters.com</A> <BR>•&nbsp;JavaScript规范:<A href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">http://www.ecma-international.org/publications/standards/Ecma-262.htm</A> <BR>•&nbsp;介绍JavaScript对象标识:<A href="http://www.crockford.com/JSON/index.html">http://www.crockford.com/JSON/index.html</A> <BR>•&nbsp; Mozilla 的Venkman JavaScript调试器:<A href="http://www.mozilla.org/projects/venkman/">http://www.mozilla.org/projects/venkman/</A> <BR>•&nbsp; XML DOM参考:<A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/</A><BR>xmlsdk/html/e9da2722-7879-4e48-869c-7f16714e2824.asp <BR>•&nbsp;Microsoft Dynamic HTML reference: <A href="http://msdn.microsoft.com/library/default.asp?url=/">http://msdn.microsoft.com/library/default.asp?url=/</A><BR>workshop/author/dhtml/reference/dhtml_reference_entry.asp <BR>•&nbsp;Gecko DOM Reference: <A href="http://www.mozilla.org/docs/dom/domref/">http://www.mozilla.org/docs/dom/domref/</A> <BR>•&nbsp;"“移植IE应用到Mozilla”<BR><A href="http://www-128.ibm.com/developerworks/web/library/wa-ie2mozgd/">http://www-128.ibm.com/developerworks/web/library/wa-ie2mozgd/</A> <BR>•&nbsp;Mozilla XUL reference: <BR><A href="http://www.xulplanet.com/">http://www.xulplanet.com/</A> <BR>•&nbsp;Microsoft XAML reference: <BR><A href="http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/">http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/</A><BR>en-us/wcp_conceptual/html/0ff5f36e-dd84-44d1-aa3e-5bb4f147b169.asp?frame=true <BR>•&nbsp;James Jesses Garret introduced the term AJAX in his article "AJAX: A New Approach to Web Applications," (Adaptive Path, February 2005): “AJAX：新的网页应用开发方式”<BR><A href="http://www.adaptivepath.com/publications/essays/archives/000385.php">http://www.adaptivepath.com/publications/essays/archives/000385.php</A> <BR>•&nbsp;JetBrains IntelliJ IDEA: <BR><A href="http://www.jetbrains.com/">http://www.jetbrains.com/</A> <BR>•&nbsp;Microsoft Visual Studio: <BR><A href="http://msdn.microsoft.com/vstudio/">http://msdn.microsoft.com/vstudio/</A> <BR>•&nbsp;JSEditor: <BR><A href="http://jseditor.sourceforge.net/">http://jseditor.sourceforge.net/</A> <BR>•&nbsp;JSEclipse: <BR><A href="http://www.interaktonline.com/Products/Eclipse/JSEclipse/Overview/">http://www.interaktonline.com/Products/Eclipse/JSEclipse/Overview/</A> <BR>•&nbsp;ActiveState Komodo: <BR><A href="http://www.activestate.com/Products/Komodo/">http://www.activestate.com/Products/Komodo/</A> <BR>•&nbsp;XHTML: <BR><A href="http://www.w3.org/TR/xhtml1/">http://www.w3.org/TR/xhtml1/</A> <BR>•&nbsp;Document Object Model: <BR><A href="http://www.w3.org/DOM/">http://www.w3.org/DOM/</A> <BR>•&nbsp;Cascading Style Sheets: <BR><A href="http://www.w3.org/Style/CSS/">http://www.w3.org/Style/CSS/</A> <BR>•&nbsp;Extensible Stylesheet Language: <BR><A href="http://www.w3.org/Style/XSL/">http://www.w3.org/Style/XSL/</A> <BR>•&nbsp;XForms: <BR><A href="http://www.w3.org/MarkUp/Forms/">http://www.w3.org/MarkUp/Forms/</A> <BR>•&nbsp;Scaling Vector Graphics: <BR><A href="http://www.w3.org/Graphics/SVG/">http://www.w3.org/Graphics/SVG/</A> <BR>•&nbsp;XPath: <BR><A href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</A> <BR>•&nbsp;AJAX.Net: <BR><A href="http://ajax.schwarz-interactive.de/csharpsample/default.aspx">http://ajax.schwarz-interactive.de/csharpsample/default.aspx</A> <BR>•&nbsp;Backbase: <BR><A href="http://www.backbase.com/">http://www.backbase.com</A> <BR>•&nbsp;Bitkraft: <BR><A href="http://www.tiggrbitz.com/">http://www.tiggrbitz.com/</A> <BR>•&nbsp;Django: <BR><A href="http://www.djangoproject.com/">http://www.djangoproject.com/</A> <BR>•&nbsp;Dojo: <BR><A href="http://www.dojotoolkit.org/">http://www.dojotoolkit.org/</A> <BR>•&nbsp;DWR (Direct Web Reporting): <BR><A href="http://getahead.ltd.uk/dwr/">http://getahead.ltd.uk/dwr/</A> <BR>•&nbsp;MochiKit: <BR><A href="http://mochikit.com/">http://mochikit.com/</A> <BR>•&nbsp;Prototype: <BR><A href="http://prototype.conio.net/">http://prototype.conio.net/</A> <BR>•&nbsp;Rico: <BR><A href="http://openrico.org/rico/home.page">http://openrico.org/rico/home.page</A> <BR>•&nbsp;Sajax: <BR><A href="http://www.modernmethod.com/sajax/">http://www.modernmethod.com/sajax/</A> <BR>•&nbsp;Sarissa: <BR><A href="http://sarissa.sourceforge.net/doc/">http://sarissa.sourceforge.net/doc/</A> <BR>•&nbsp;Script.aculo.us: <BR><A href="http://script.aculo.us/">http://script.aculo.us/</A> <BR>•&nbsp;Ruby on Rails: <BR><A href="http://www.rubyonrails.org/">http://www.rubyonrails.org/</A> <BR>•&nbsp;For more on AJAX and DWR, read "AJAX Made Simple with DWR," Cloves Carneiro Jr. (JavaWorld, June 2005): 关于AJAX和DWR，请阅读“AJAX使用DWR更简单”<BR><A href="http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html">http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html</A> <BR>•&nbsp;For more articles on Java development tools, browse the Development Tools section of JavaWorld’s Topical Index: 更多Java开发工具的文章，请浏览JavaWorld的开发工具部分索引页<BR><A href="http://www.javaworld.com/channel_content/jw-tools-index.shtml">http://www.javaworld.com/channel_content/jw-tools-index.shtml</A> <BR>•&nbsp;For more articles on XML, browse the Java and XML section of JavaWorld’s Topical Index: 更多XML的文章，请浏览JavaWorld的Java和XML部分索引页<BR><A href="http://www.javaworld.com/channel_content/jw-xml-index.shtml">http://www.javaworld.com/channel_content/jw-xml-index.shtml</A> <BR>•&nbsp;For more articles on UI design, browse the User Interface Design section of JavaWorld’s Topical Index: 更多UI设计的文章，请浏览JavaWorld的UI设计部分索引页<BR><A href="http://www.javaworld.com/channel_content/jw-ui-index.shtml">http://www.javaworld.com/channel_content/jw-ui-index.shtml</A> </P></DIV>
<DIV id=divcenter><BR><B>原文地址: </B><INPUT id=contentLink size=60 value=http://www.matrix.org.cn/resource/article/44/44116_AJAX.html name=contentLink> </DIV><img src ="http://www.blogjava.net/iNeo/aggbug/26524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iNeo/" target="_blank">只牵这只狗</a> 2006-01-04 10:53 <a href="http://www.blogjava.net/iNeo/archive/2006/01/04/26524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于AJAX的动态树型结构的设计与实现(三)[转] </title><link>http://www.blogjava.net/iNeo/archive/2005/12/30/25981.html</link><dc:creator>只牵这只狗</dc:creator><author>只牵这只狗</author><pubDate>Fri, 30 Dec 2005 00:32:00 GMT</pubDate><guid>http://www.blogjava.net/iNeo/archive/2005/12/30/25981.html</guid><wfw:comment>http://www.blogjava.net/iNeo/comments/25981.html</wfw:comment><comments>http://www.blogjava.net/iNeo/archive/2005/12/30/25981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iNeo/comments/commentRss/25981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iNeo/services/trackbacks/25981.html</trackback:ping><description><![CDATA[2.3 业务逻辑层设计
<P>　　2.3.1 动态加载技术</P>
<P>　　如果一次性获取完整的先序树，构造成xml提供给JavaScript解析，数据量越大，消耗的资源越多，客户端响应延迟时间就越长，因此对于大数据量的树，采用动态加载方式，即每次单击“+”图片时，判断是否已加载子节点数据，如果未加载则通过Ajax的XMLHTTP组件XMLHTTPRequest对象异步发送请求，连接服务器执行SQL 语句“select * from tree_class where parent = ？order by classcode ”获取节点数据。相关JavaScript 代码如下：</P>
<P class=code>/*判断是否已经加载数据，未加载则访问服务器加载数据*/<BR><BR>dhtmlTree.prototype.Loading=function(pObject){<BR>　if(((pObject.XMLload==0)&amp;&amp;(this.XMLsource))&amp;&amp;(!this.XMLloading)){<BR>　　pObject.XMLload=1;<BR>　　this.loadXML(this.XMLsource+getUrlSymbol(this.XMLsource)+"id="+escape(pObject.id));<BR>　}<BR>}<BR>dtmlXMLObject.prototype.loadXML=function(url){//加载数据<BR>　try {<BR>　　this.xmlDoc = new XMLHttpRequest();<BR>　　/*通过GET方法异步连接到 url 加载数据*/<BR>　　this.xmlDoc.open("GET", url,true);//true：异步；false：同步<BR>　　this.xmlDoc.send(null);<BR>　} catch(e){<BR>　　this.xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");//使用IE<BR>　　this.xmlDoc.open("GET", url,true);//true：异步；false：同步<BR>　　this.xmlDoc.send(null);<BR>　}<BR>　return this.xmlDoc.responseXML;<BR>}</P>
<P>　　每次只取同一个父节点ParentId的子节点序列，按XML格式封装成树的文档结构，例如：</P>
<P class=code>＜tree id="0"＞<BR>＜leaf child=”1" name="国防科技大学" id="1" im0="leaf.gif" im1="folderOpen.gif" im2=" folderClosed.gif"/＞<BR>＜/tree＞</P>
<P>　　提供给JavaScript的dhtmlTreeObject.prototype.insertItem（）解析并组织好html输出节点；其中 child：1表示有子节点，0表示没有子节点；im0表示没有子节点时的图标；im1表示有子节点并且打开节点时的图标；im2表示有子节点并且关闭时的图标；所以还可以在构造XML时自定义图标。</P>
<P>　　2.3.2 树型结构的构造</P>
<P>　　从数据库中返回的是有序的先序树，而XML是完整的树型结构文档，所以将树型数据构造成预定义的XML格式，只需从根节点开始，遍历一遍树，即可将树全部生成。相关JavaScript代码如下：</P>
<P class=code>/*动态加载树的构造方法*/<BR><BR>dtmlXMLObject.prototype.constructTree=function(){<BR><BR>//采用动态加载时获取的xml数据，解析树型数据<BR><BR>var node=this.XMLLoader.getXMLTopNode("tree");<BR><BR>var parentId=node.getAttribute("id");<BR><BR>for(var i=0;i＜node.childNodes.length;i++) { //逐个解析xml文件的leaf节点<BR><BR>　if((node.childNodes[i].nodeType==1)&amp;&amp;(node.childNodes[i].tagName == "leaf")){<BR>　　var name=node.childNodes[i].getAttribute("text");<BR>　　…………<BR>　　var temp=dhtmlObject.a0Find(parentId);//获取父节点对象<BR>　　temp.XMLload=1;//已加载<BR>　　//构造html输出节点<BR>　　dhtmlObject.insertItem(parentId,cId,name,im0,im1,im2,chd);<BR>　　dhtmlObject.addDragger = this;//设置可拖放的对象<BR>　};<BR>}</P>
<P>　　2.3.3 树型结构的维护</P>
<P>　　在维护树型结构表时,删除节点较为简单，SQL 语句为: "delete from tree_class where classcode like′"+ classcode +"%′",即可将其节点和孩子一并删除；增加节点时,分为前插、后插、和插入子节点三种情况，前两种情况需要更新递归更新类别代码，后者只需找到父节点的孩子的最大类别代码加1 后,作为增加节点的类别代码；通过拖放来改变树的结构时，只需将拖动节点的parentId更新为目标节点的Classid即可，对应的SQL语句为："update tree_class set parentId = "+ classidTo+" where classid = "+ classidFrom。</P>
<P>　　<STRONG>3、效率分析</STRONG></P>
<P>　　对于树的存储一般有两种形式：二维表和链表，遍历方式一般也有深度遍历和广度遍历两种方式，遍历的时间复杂度都是O( n )。用二维表存储时，在内存中用数组的下标能准确定位节点的父节点、兄弟节点所在的数组下标。数据库中节点的定位也是准确的，但是将节点信息从数据库中读到内存中时，如果无法通过内存数组下标定位节点信息，那么就必须遍历一遍寻找一个节点，n 个节点中寻找一个节点的时间是O(n/2)，n 个节点排序的时间复杂度将是O( n 2/2)，这也是一般实现的B/S 模式的树结构效率低下的原因。本方案采用字典序编号方案，使得从数据库中取得的树是已经排序的，直接遍历生成客户页面程序，时间复杂度为O( n )。</P>
<P>　　<STRONG>4、结 论</STRONG></P>
<P>　　本文讨论了基于Ajax的动态树型结构的实现方案，支持无刷新动态维护树的节点信息，支持拖放节点改变树的节点结构以及次序；同时采用数据库存储节点信息，保证了该方案有一定的通用性，此外结合XML描述树的节点信息，使得任何按本方案预定的xml文档描述的信息都可以通过树来展现。本方案已经应用在我校的数字迎新系统以及老百姓大药房信息系统中。</P><img src ="http://www.blogjava.net/iNeo/aggbug/25981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iNeo/" target="_blank">只牵这只狗</a> 2005-12-30 08:32 <a href="http://www.blogjava.net/iNeo/archive/2005/12/30/25981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于AJAX的动态树型结构的设计与实现(二)[转]</title><link>http://www.blogjava.net/iNeo/archive/2005/12/30/25980.html</link><dc:creator>只牵这只狗</dc:creator><author>只牵这只狗</author><pubDate>Fri, 30 Dec 2005 00:31:00 GMT</pubDate><guid>http://www.blogjava.net/iNeo/archive/2005/12/30/25980.html</guid><wfw:comment>http://www.blogjava.net/iNeo/comments/25980.html</wfw:comment><comments>http://www.blogjava.net/iNeo/archive/2005/12/30/25980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iNeo/comments/commentRss/25980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iNeo/services/trackbacks/25980.html</trackback:ping><description><![CDATA[2.1 表示层实现<BR><BR>　　类似Windows资源管理器的文件夹模式，节点的图片样式如表1所示。对于每个节点的DHTML 代码，需要包含节点的位置、前导图片、样式、针对该节点的其他操作等。同时为了节点显示的连贯性，还需一些前导图片。<BR><BR>　　表1 树节点的前的图片样式表
<P align=center><IMG src="http://www.7dspace.com/files/pic/200512/29062922677.gif"></P>　对于树的非叶子节点，图片和节点信息等，采用一个DIV ( division) 容器包含。DIV 等容器是DHTML 的基础，使用它可以通过脚本程序对其属性进行操作，如设置其style 样式的display 属性来控制子节点的展开和隐藏。节点的位置、前导图片、样式、针对该节点的其他的操作等都放入容器中，例： 
<P class=code>＜ DIV id =mParentID＞<BR>＜ IMG align = center border = 0 onclick =″nodeExpand (‘leafid’)″ name = m1Tree src =′Tplus.gif′＞<BR>＜ IMG align = center border = 0 name = m1Folder src =′folderClosed. gif′＞ 计算机学院 ＜/p＞</P>
<P>　　叶子节点无需容器直接输出即可。<BR><BR>　　当点击某节点前的“ + ”、“ - ”图片时通过DIV 的style 样式的display 属性控制子节点的展开和隐藏。display：“none”(隐藏,不可见)，display：“block”(显示) 。相关JavaScript 代码如下：</P>
<P class=code>if (expandChild.style.display = =″none″){ <BR>　// 当前为隐藏状态,执行展开动作<BR>　this.Loading(parentObject);//判断该分支的数据是否已经加载<BR>　expandChild.style.display =″block″; <BR>if (para2 = =″last″)<BR>　parentObject.src =″Lminus. gif″; // 最后一个节点<BR>else <BR>　parentObject.src = ″Tminus. gif″; // 显示┠<BR>　expandFolder.src = ″folderOpen. gif″;<BR>}else {<BR>　// 将当前节点的子节点全部隐藏<BR>　expandChild.style.display = ″none″;<BR>　if (para2 = = ″last″)<BR>　　parentObject.src = ″Lplus. gif″;<BR>　else <BR>　　parentObject.src = ″Tplus. gif″;<BR>　　expandFolder.src = ″folderClosed. gif″;<BR>}</P>　　2.2 树型表结构设计<BR><BR>　　我们以数据库为载体记录节点的变化，树型表结构至少要有以下字段：节点的编号(CLASSID) ,对节点的描述(ClassName)，父节点的编号(ParentId)，这些是构建树结构所必须的信息。同时引入节点的类别代码（ClassCode），节点的级别（ClassLevel），是否叶子节点 (Terminated)等辅助字段，记录节点次序，实体关系图如图3所示。 
<P align=center><IMG src="http://www.7dspace.com/files/pic/200512/29062934563.gif"><BR>图 3 树型表结构示意图</P>
<P>　　树遍历的时间复杂度是O( n )，但是将树信息存放到数据库后，就不能按传统的方式遍历树，必须使用SQL 语句访问数据库表的内容，而一次性取的数据量越多，消耗的资源也越多，用户等待的时间就越长。如果将无序的数据从数据库中读出，在服务器端，必须将排序后的树送到客户端显示。因此，最好从数据库读出已排好序的树。<BR><BR>　　我们知道，字符串排序是按照字典序形式。结合SQL 语句的特点和树结构特点，数据库表中，节点的类别代码采用多级字符串形式，如AAABBBCCC，从树根节点开始，每向下一级字符串就增加一级，并且子节点类别代码以父节点类别代码开始，再开始本级的类别代码。同级的节点按照生成的顺序编号，如节点类别代码为AAA 的下一级孩子类别代码为AAAAAA，AAAAAB 等，AAAAAB 的孩子节点为AAAAABAAA、AAAAABAAB等。每一级编号字符的宽度与实际的应用关联，如AAA～ZZZ 一级则有263 个节点，如果不够用再增加一个字符用于编码。该巧妙的编号方式。使得在执行SQL 语句select * from tree_class order by classcode 后，一次获得完整的先序.<BR><BR><FONT color=#008000>原文链接:http://www.7dspace.com/doc/44/0512/2005122906292220003.htm</FONT></P><img src ="http://www.blogjava.net/iNeo/aggbug/25980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iNeo/" target="_blank">只牵这只狗</a> 2005-12-30 08:31 <a href="http://www.blogjava.net/iNeo/archive/2005/12/30/25980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于AJAX的动态树型结构的设计与实现(一)[转]</title><link>http://www.blogjava.net/iNeo/archive/2005/12/30/25979.html</link><dc:creator>只牵这只狗</dc:creator><author>只牵这只狗</author><pubDate>Fri, 30 Dec 2005 00:28:00 GMT</pubDate><guid>http://www.blogjava.net/iNeo/archive/2005/12/30/25979.html</guid><wfw:comment>http://www.blogjava.net/iNeo/comments/25979.html</wfw:comment><comments>http://www.blogjava.net/iNeo/archive/2005/12/30/25979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iNeo/comments/commentRss/25979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iNeo/services/trackbacks/25979.html</trackback:ping><description><![CDATA[<DIV align=center>
<H1><FONT size=3></FONT><FONT size=3><BR></FONT>
<SCRIPT src="/js/486x60.js" type=text/javascript></SCRIPT>
</H1></DIV>
<DIV id=content>　　摘 要:简要介绍了一种通用的，动态树型结构的实现方案，该方案基于Asynchronous JavaScript and XML，结合Struts框架设计实现了结构清晰、扩展性良好的多层架构，数据存储于数据库，结合XML描述树的节点信息，使得任何按预定的XML文档描述的信息都可以通过动态树来展现。<BR><BR>　　关键词:MVC模式；Ajax；树型结构；字典序<BR><BR>　　树型结构是一类应用非常广泛的数据结构。人类社会中宗族的族谱和现代企业的组织形式都是树型结构。在计算机领域中,文件系统中文件的管理结构、存储器管理中的页表、数据库中的索引等也都是树型结构。随着Internet的飞速发展，树型结构在浏览器/服务器（Browser/Server，简称B/S）应用系统的应用也越来越广泛。 <BR><BR>　　目前，在互联网上广泛存在、应用的树型结构一般分为两种：静态和动态结构。静态结构存在最多、实现简单，但是静态导致不能改变树的结构和内容，无法反映树的节点信息的变化；而实现相对复杂的动态构造树，虽然可以动态增加、删除、更新节点信息，但是大部分不能直接拖放节点来改变树的结构以及节点间的次序，并且反复刷新整个页面，给用户维护带来了许多不便。本文提出了一种基于Ajax （Asynchronous JavaScript and XML）通用的、动态加载节点的解决方案。实现上采用J2EE多层架构，树节点的描述信息采用数据库存储，以可扩展标记语言（eXtensible Markup Language，简称XML）展现给JavaScript解析，支持无刷新地增加、删除、更新节点信息，以及拖放节点来改变树的结构和节点间的次序。文中第1部分简要介绍了Ajax技术；第2部分详细介绍了该方案的技术实现过程；第3部分分析了该方案的效率。<BR><BR>　　<STRONG>1、Ajax简介</STRONG><BR><BR>　　Ajax概念的最早提出者Jesse James Garrett认为：Ajax并不是一门新的语言或技术，它实际上是几项技术按一定的方式组合在共同的协作中发挥各自的作用，它包括：<BR><BR>　　·使用扩展超媒体标记语言（eXtended Hypertext Markup Language，简称XHTML）和级联样式单（Cascading Style Sheet，简称CSS）标准化呈现；<BR><BR>　　·使用文档对象模型（Document Object Model，简称DOM）实现动态显示和交互；<BR><BR>　　·使用可扩展标记语言（eXtensible Markup Language，简称XML）和可扩展样式表转换（eXtensible Stylesheet Language Transformation，简称XSLT）进行数据交换与处理；<BR><BR>　　·使用XMLHTTP组件XMLHttpRequest对象进行异步数据读取；<BR><BR>　　·最后用JavaScript绑定和处理所有数据。<BR><BR>　　Ajax的工作原理如图1所示，它相当于在用户和服务器之间加了一个中间层，使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器，像— 些数据验证和数据处理等都交给Ajax引擎处理，只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。这样就把一些服务器负担的工作转嫁到客户端，利用客户端闲置的处理能力来处理，减轻服务器和带宽的负担，从而达到节约ISP的空间及带宽租用成本的目的。 
<P align=center><IMG src="http://www.7dspace.com/files/pic/200512/29062922205.gif"><BR>图 1 未使用Ajax（a）和使用Ajax（b）的web应用比较</P>　　<STRONG>2、总体设计方案<BR></STRONG><BR>　　传统的服务器程序采用Model 1开发模型，通常将业务逻辑、服务器端处理过程和HTML代码集中在一起表示，快速完成应用开发。Model 1 在小规模应用开发时优势明显，但是应用实现一般是基于过程的，一组服务器页面实现一个流程，如果流程改动将导致多个地方修改，非常不利于应用的扩展和更新。此外业务逻辑和表示逻辑混合在服务器页面中，耦合紧密，无法模块化，导致代码无法复用。<BR><BR>　　Model 2则解决了这些问题，它是面向对象的MVC模式（Model-View-Controller，模型-视图-控制器）在Web开发中的应用，Model表示应用的业务逻辑，View是应用的表示层页面，Controller是提供应用的处理过程控制。通过这种MVC设计模式把应用逻辑，处理过程和显示逻辑划分成不同的组件、模块实现，组件间可以进行交互和重用。<BR><BR>　　本方案是采用J2EE的多层架构，设计时结合Struts框架将表示层、业务逻辑层和数据层划分成不同的模块。表示层专注于树的外观显示，业务逻辑层为服务器端处理程序，处理树的生成、变化，为减少耦合性，该程序全部模块化实现，不在表示页面嵌入服务器程序；模型层是数据的存储和表示。下面分别介绍各层实现。<BR><BR><FONT color=#008000>原文链接:http://www.7dspace.com/doc/44/0512/2005122906292220003.htm</FONT></DIV><img src ="http://www.blogjava.net/iNeo/aggbug/25979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iNeo/" target="_blank">只牵这只狗</a> 2005-12-30 08:28 <a href="http://www.blogjava.net/iNeo/archive/2005/12/30/25979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX入门[Z]</title><link>http://www.blogjava.net/iNeo/archive/2005/12/05/22609.html</link><dc:creator>只牵这只狗</dc:creator><author>只牵这只狗</author><pubDate>Mon, 05 Dec 2005 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/iNeo/archive/2005/12/05/22609.html</guid><wfw:comment>http://www.blogjava.net/iNeo/comments/22609.html</wfw:comment><comments>http://www.blogjava.net/iNeo/archive/2005/12/05/22609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iNeo/comments/commentRss/22609.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iNeo/services/trackbacks/22609.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Posted on 2005-11-24 00:21 BlueO2 阅读(469) 评论(0) &nbsp;编辑&nbsp;收藏 收藏至365Key 所属分类: AJAX  -->本想翻译IBM的一篇文章 Build apps using Asynchronous JavaScript with XML 但是发现不如就按照那个方式想怎么写就怎么写。之后有时间了会把其中的一个系列...&nbsp;&nbsp;<a href='http://www.blogjava.net/iNeo/archive/2005/12/05/22609.html'>阅读全文</a><img src ="http://www.blogjava.net/iNeo/aggbug/22609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iNeo/" target="_blank">只牵这只狗</a> 2005-12-05 17:12 <a href="http://www.blogjava.net/iNeo/archive/2005/12/05/22609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Ajax的应用程序架构汇总[Z]</title><link>http://www.blogjava.net/iNeo/archive/2005/12/05/22546.html</link><dc:creator>只牵这只狗</dc:creator><author>只牵这只狗</author><pubDate>Mon, 05 Dec 2005 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/iNeo/archive/2005/12/05/22546.html</guid><wfw:comment>http://www.blogjava.net/iNeo/comments/22546.html</wfw:comment><comments>http://www.blogjava.net/iNeo/archive/2005/12/05/22546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iNeo/comments/commentRss/22546.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iNeo/services/trackbacks/22546.html</trackback:ping><description><![CDATA[<DIV class=postText>
<P style="TEXT-INDENT: 2em">浏览器端框架被划分成两大类：</P>
<P style="TEXT-INDENT: 2em">·应用程序框架：提供浏览器的功能，但是常以包括窗口小部件抽象和另外的部件而出名，其功能主要围绕桌面GUI框架。</P>
<P style="TEXT-INDENT: 2em">·基本结构框架：提供基本的管道和可移植的浏览器抽象，让<A href="http://tech.163.com/special/d/0009159F/developer.html" target=_blank><FONT color=#0066cc>开发</FONT></A>者去创建内容。典型的功能：</P>
<P style="TEXT-INDENT: 2em">* 针对XMLHttpRequest的包装器以封装浏览器-服务器的交互。(所有的框架都提供这一功能)。</P>
<P style="TEXT-INDENT: 2em">* XML操作和查询。</P>
<P style="TEXT-INDENT: 2em">* 根据来自XMLHttpRequest的应答执行DOM操作。</P>
<P style="TEXT-INDENT: 2em">* 在一些情况中，与另外的浏览器端技术如Flash(和潜在的Java applets)集成在一起。</P>
<P style="TEXT-INDENT: 2em">而服务器端框架通常以下面两种方式工作(尽管它们在这里根据语言的不同进行了分类)：</P>
<P style="TEXT-INDENT: 2em">·HTML/JS生成：服务器提供完整的HTML/Javascript代码生成和浏览器-服务器协调，结果是只有浏览器端编码可以被定制。</P>
<P style="TEXT-INDENT: 2em">·远程调用：Javascript调用直接被路由到服务器端功能(例如Java方法)并返回到Javascript回叫处理器；或者Javascript调用服务器以提取信息，例如会话细节，数据库查询等。</P>
<P style="TEXT-INDENT: 2em">·纯Javascript：应用程序框架</P>
<P style="TEXT-INDENT: 2em">1.1 Bindows(自从2003年)</P>
<P style="TEXT-INDENT: 2em">网址是：http://www.bindows.net，Bindows是一个软件开发包(SDK)，它，通过强力联合DHTML，JavaScript，CSS和XML等技术，能生成高度交互的<A href="http://tech.163.com/special/n/000915I8/network.html" target=_blank><FONT color=#0066cc>互联网</FONT></A>应用程序-成为现代的桌面应用程序的强有力对手。Bindows应用程序不要求下载和也不需要在用户端安装-仅要求有一个浏览器(也不需要Java，Flash或者ActiveX)。Bindows有可能领导面向对象开发的AJAX应用程序的平台。</P>
<P style="TEXT-INDENT: 2em">·它是商业化的，使用来自于MB的技术(总部位于GA USA，主要开发中心在瑞典，成立于2002年)。</P>
<P style="TEXT-INDENT: 2em">Bindows框架提供给你：</P>
<P style="TEXT-INDENT: 2em">·基于类的面向对象的API</P>
<P style="TEXT-INDENT: 2em">·一套完整的窗口系统，提供宽范围的窗口小部件支持，包括菜单、表单、格子、滑动条、量程，甚至更多</P>
<P style="TEXT-INDENT: 2em">·用于开发zero-footprint SOA客户端应用程序的领先的工具箱</P>
<P style="TEXT-INDENT: 2em">·本机的XML，SOAP和XML-RPC支持</P>
<P style="TEXT-INDENT: 2em">·单用户到企业级的支持</P>
<P style="TEXT-INDENT: 2em">·内建的对AJAX的支持</P>
<P style="TEXT-INDENT: 2em">Bindows开发环境：</P>
<P style="TEXT-INDENT: 2em">·支持企业级规模的工程开发</P>
<P style="TEXT-INDENT: 2em">·跨浏览器，跨平台支持</P>
<P style="TEXT-INDENT: 2em">·服务器独立结构</P>
<P style="TEXT-INDENT: 2em">·与新的和现有资源的互操作性</P>
<P style="TEXT-INDENT: 2em">·一致性开发方法学</P>
<P style="TEXT-INDENT: 2em">1.2 BackBase(自从2003年)</P>
<P style="TEXT-INDENT: 2em">网址是：http://www.backbase.com，是一个全面的浏览器端框架，支持丰富的浏览器功能以及与.NET和Java的集成。</P>
<P style="TEXT-INDENT: 2em">·商业化，来自于Backbase B.V(总部在Amsterdam，成立于2003年)。</P>
<P style="TEXT-INDENT: 2em">1.3 DOJO(开发中;自从2004年9月)</P>
<P style="TEXT-INDENT: 2em">网址是：http://dojotoolkit.org/，提供全面窗口小组件和浏览器-服务器消息支持。</P>
<P style="TEXT-INDENT: 2em">·为创建定制的Javascript窗口小组件提供框架支持。 </P>
<P style="TEXT-INDENT: 2em">·预置的窗口小组件库。</P>
<P style="TEXT-INDENT: 2em">·浏览器-服务器消息支持-XMLHttpRequest和另外的机制。</P>
<P style="TEXT-INDENT: 2em">·支持浏览器中的URL操纵功能。</P>
<P style="TEXT-INDENT: 2em">·开源许可(学术自由许可2.1(http://opensource.org/licenses/afl-2.1.php))，由JotSpot(http://www.jot.com/)的Alex Russell(http://alex.dojotoolkit.org/)所领导。</P>
<P style="TEXT-INDENT: 2em">1.4 Open Rico(开发中;自从2005年5月;基于早期的私有框架)</P>
<P style="TEXT-INDENT: 2em">网址是：http://openrico.org/demos.page，是一多用途框架，支持Ajax基础结构和用户交互。</P>
<P style="TEXT-INDENT: 2em">·一个XMLHttpRequest应答能被路由到一个或者更多回叫操作，DOM对象，或者Javascript对象。</P>
<P style="TEXT-INDENT: 2em">·容易鼠标拖动支持。</P>
<P style="TEXT-INDENT: 2em">·Ajax动画，例如缩放和变换。</P>
<P style="TEXT-INDENT: 2em">·"行为"-实质上是窗口小组件库。</P>
<P style="TEXT-INDENT: 2em">·使用指南(http://www.mirimar.net/mailbrowser/)，由RussMirimar的Yonah所提供</P>
<P style="TEXT-INDENT: 2em">·开源。源于Sabre航空公司解决方案，由Bill Scott(http://looksgoodworkswell.blogspot.com)，Darren James及另外一些人所支持。</P>
<P style="TEXT-INDENT: 2em">1.5 qooxdoo(开发中;自从2005年5月)</P>
<P style="TEXT-INDENT: 2em">网址是：http://qooxdoo.sourceforge.net/，是另一个雄心勃勃的框架，提供宽范围的UI支持和正在开发中的基础结构特性。</P>
<P style="TEXT-INDENT: 2em">·基础结构：</P>
<P style="TEXT-INDENT: 2em">* DOM和事件/焦点管理的可移植的抽象。</P>
<P style="TEXT-INDENT: 2em">* 调试支持。</P>
<P style="TEXT-INDENT: 2em">* 易于时间调度的Timer类。 </P>
<P style="TEXT-INDENT: 2em">* Getter/Setter支持。</P>
<P style="TEXT-INDENT: 2em">·UI：</P>
<P style="TEXT-INDENT: 2em">* 窗口小组件框架和预置的窗口小组件库。</P>
<P style="TEXT-INDENT: 2em">* 布局管理器。</P>
<P style="TEXT-INDENT: 2em">* <A href="http://tech.163.com/special/p/0009158A/photos.html" target=_blank><FONT color=#0066cc>图像</FONT></A>缓冲和可移植的PNG透明性。</P>
<P style="TEXT-INDENT: 2em">·开源(LGPL)。来自多方面的贡献者。</P>
<P style="TEXT-INDENT: 2em">1.6 Tibet(开发中;自从2005年6月)</P>
<P style="TEXT-INDENT: 2em">网址是：http://www.technicalpursuit.com/，目的是提供高度可移植的和全面的Javascript API，结果是，可能自动生成大量的客户端代码。自称是"企业级Ajax"。</P>
<P style="TEXT-INDENT: 2em">·远程脚本运行在XMLHttpRequest包装之上-通过协调调用结果支持工作流管理，例如应答可以发生在只有当两个分离的调用返回时。</P>
<P style="TEXT-INDENT: 2em">·URI支持。</P>
<P style="TEXT-INDENT: 2em">·所有的HTTP方法-不仅是"GET"和"POST"。</P>
<P style="TEXT-INDENT: 2em">·低级的协议-File://和WebDav以及HTTP。</P>
<P style="TEXT-INDENT: 2em">·Web服务调用-SOAP，XML-RPC，等等。</P>
<P style="TEXT-INDENT: 2em">·预置的针对<A href="http://tech.163.com/special/l/00091HLK/ls_google_ms.html" target=_blank><FONT color=#0066cc>Google</FONT></A> API，Amazon API等等服务的支持。</P>
<P style="TEXT-INDENT: 2em">·由高级Javascript对象组成一个巨大的库。</P>
<P style="TEXT-INDENT: 2em">·许多XML操作。</P>
<P style="TEXT-INDENT: 2em">·IDE和开发工具。</P>
<P style="TEXT-INDENT: 2em">·开源许可(显然经过OSI认证，但是细节不多)。 </P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">2 纯Javascript：基础结构框架 </P>
<P></P>
<P style="TEXT-INDENT: 2em">2.1 AjaxCaller(Alpha版本;自从5月2005年)</P>
<P style="TEXT-INDENT: 2em">网址是：http://ajaxify.com/run/testAjaxCaller/，是一基本的线程安全的XMLHttpRequest包装器，主要针对Ajax新手，仍处于原始的alpha<A href="http://tech.163.com/special/d/0009159F/developer.html" target=_blank><FONT color=#0066cc>开发</FONT></A>阶段，目前仅与AjaxPatterns的在线搜索范例一起打包。</P>
<P style="TEXT-INDENT: 2em">·实现对服务器的调用(GET/POST/PUT/DELETE)，用路由到一个回叫操作的plain-text或者XML完成。</P>
<P style="TEXT-INDENT: 2em">·使用过的XMLHttpRequest对象的析构。</P>
<P style="TEXT-INDENT: 2em">·Response缓冲(计划的)。</P>
<P style="TEXT-INDENT: 2em">·针对Ajax新手-并非强调性能优化，该库主要用于实现易读的基础代码并将提供调试支持。</P>
<P style="TEXT-INDENT: 2em">·开源许可。由Michael Mahemoff(http://softwareas.com)(具有John Wehr和Richard Schwartz的一些思想)维护。</P>
<P style="TEXT-INDENT: 2em">2.2 Flash JavaScript集成包</P>
<P style="TEXT-INDENT: 2em">网址是：http://www.osflash.org/doku.php?id=flashjs，允许JavaScript和Flash内容的集成：</P>
<P style="TEXT-INDENT: 2em">·使JavaScript能够调用ActionScript功能和反过来的实现。</P>
<P style="TEXT-INDENT: 2em">·所有主要的数据类型能在这两种环境之间传递。</P>
<P style="TEXT-INDENT: 2em">·开源许可。由多个开源Flash贡献者提供支持。</P>
<P style="TEXT-INDENT: 2em">2.3 <A href="http://tech.163.com/special/l/00091HLK/ls_google_ms.html" target=_blank><FONT color=#0066cc>Google</FONT></A> AJAXSLT(发行于2005年6月)</P>
<P style="TEXT-INDENT: 2em">网址是：http://goog-ajaxslt.sourceforge.net/，是一个Javascript框架，用来执行XSLT转换以及XPath查询。</P>
<P style="TEXT-INDENT: 2em">·建立在Google地图工作基础之上。</P>
<P style="TEXT-INDENT: 2em">·开源许可(BSD)。由一家创新搜索方案公司支持，自称为"Google"。</P>
<P style="TEXT-INDENT: 2em">2.4 HTMLHttpRequest(Beta版；始于2005年)</P>
<P style="TEXT-INDENT: 2em">HtmlHttpRequest(http://www.twinhelix.com/javascript/htmlhttprequest/)，它使用了XMLHttpRequest和Iframes以改进兼容性。</P>
<P style="TEXT-INDENT: 2em">·测试过并能工作在:IE6/Win，IE5.5/Win，IE5/Win，IE4/Win，Mozilla/Win，Opera7/Win，Safari/Mac，IE5/Mac。</P>
<P style="TEXT-INDENT: 2em">·未测试，可能能工作在：IE4/Mac，Mozilla/Mac，Opera/Other，Konqueror/Linux。你正在使用这些之一吗？作者正在请求兼容性信息。</P>
<P style="TEXT-INDENT: 2em">·开源许可(LGPL)。由Twin Helix Designs(http://www.twinhelix.com/)的Angus Turnbull维护。</P>
<P style="TEXT-INDENT: 2em">2.5 交互式<A href="http://tech.163.com/special/w/0009158K/website.html" target=_blank><FONT color=#0066cc>网站</FONT></A>框架(自从2005年5月)</P>
<P style="TEXT-INDENT: 2em">交互式网站框架(http://sourceforge.net/projects/iwf/，是一个项目，目的是从浏览器端对Ajax基础结构的多方面予以支持。自描述为"使用javascript，css，xml，和html来创造高度交互网站的框架。包括一个定制的针对高度可读的javascript的xml分析器。实质上，是建立基于AJAX的网站的基础，还有另外一些通用脚本"。</P>
<P style="TEXT-INDENT: 2em">·线程安全的XMLHttpRequest实现。</P>
<P style="TEXT-INDENT: 2em">·针对XML文档的包装器，以便你能够创建更具可读性的代码：</P>
<P style="TEXT-INDENT: 2em">var node = doc.groceries.frozen[0].pizza[0].size;&lt;/pre&gt;</P>
<P style="TEXT-INDENT: 2em">代替手工的导航：</P>
<P style="TEXT-INDENT: 2em">var node = doc.documentElement.firstChild.firstChild.getAttribute("size");&lt;/pre&gt;</P>
<P style="TEXT-INDENT: 2em">·开源许可。由Weaver(http://circaware.com|Brock)维护。</P>
<P style="TEXT-INDENT: 2em">2.6 LibXMLHttpRequest(发行于2003年6月)</P>
<P style="TEXT-INDENT: 2em">libXmlRequest(http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html)，是XMLHttpRequest的一个瘦包装器。</P>
<P style="TEXT-INDENT: 2em">·getXML()和postXML()方法。</P>
<P style="TEXT-INDENT: 2em">·XMLHttpRequest对象池支持。</P>
<P style="TEXT-INDENT: 2em">·Response缓冲。</P>
<P style="TEXT-INDENT: 2em">·可用源码(明显)，但是受标准版权的保护，由Stephen W.Coate(http://www.whitefrost.com/index.jsp)所维护。</P>
<P style="TEXT-INDENT: 2em">2.7 RSLite(x)</P>
<P style="TEXT-INDENT: 2em">网站是：http://www.ashleyit.com/rs/main.htm，是一个针对XMLHttpRequest的瘦包装器。</P>
<P style="TEXT-INDENT: 2em">·一个简单的组件，作为Brent Ashley的更全面的远程脚本工作(参见Javascript远程脚本-JSRS在多语言服务器端)的一部分发行。</P>
<P style="TEXT-INDENT: 2em">2.8 Sack(在开发中，自从2005年5月)</P>
<P style="TEXT-INDENT: 2em">网站是：http://twilightuniverse.com/2005/05/sack-of-ajax/，是一个针对XMLHttpRequest的瘦包装器。</P>
<P style="TEXT-INDENT: 2em">·调用者能指定回叫函数或者回叫DOM对象。借助于回叫DOM，应答文本直接被推入到DOM中</P>
<P style="TEXT-INDENT: 2em">2.9 Sarissa(发行于2月，2003年)</P>
<P style="TEXT-INDENT: 2em">网站是：http://sarissa.sf.net，是一种Javascript API，它封装了在浏览器端可以独立调用XML的功能。</P>
<P style="TEXT-INDENT: 2em">·可移植的XMLHttpRequest创建</P>
<P style="TEXT-INDENT: 2em">·可移植的XPath查询</P>
<P style="TEXT-INDENT: 2em">·可移植的DOM操作</P>
<P style="TEXT-INDENT: 2em">·可移植的XSLT</P>
<P style="TEXT-INDENT: 2em">·可移植的XML串行化</P>
<P style="TEXT-INDENT: 2em">·开源(GPL2.0和LGPL2.1)。来自多方面贡献者。</P>
<P style="TEXT-INDENT: 2em">2.10 XHConn(发行于自从4月，2005年)</P>
<P style="TEXT-INDENT: 2em">网站是：http://xkr.us/code/javascript/XHConn/，是一个对XMLHttpRequest的瘦包装器。</P>
<P style="TEXT-INDENT: 2em">·例如：</P>
<P style="TEXT-INDENT: 2em">new XHConn().connect("mypage.php"，"POST"，"foo=bar&amp;baz=qux"，fnWhenDone);</P>
<P style="TEXT-INDENT: 2em">·开源许可。由Brad Fults所维护。</P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">服务器端：多种语言 </P>
<P></P>
<P style="TEXT-INDENT: 2em">3.1 跨平台异步的接口工具箱(5月2005年)</P>
<P style="TEXT-INDENT: 2em">CPAINT：http://cpaint.sourceforge.net/，是一真正的支持PHP和ASP/Vbscript的Ajax实现和JSRS(JavaScript远程脚本)实现。CPAINT提供给你需求的代码在后台实现AJAX和JSRS，而返回的数据以JavaScript形式在前台操作，格式化和显示。这允许你创建能提供接近实时的反馈给用户的web应用程序。</P>
<P style="TEXT-INDENT: 2em">·支持PHP&amp;ASP</P>
<P style="TEXT-INDENT: 2em">·针对所有函数的一致的JavaScript文件</P>
<P style="TEXT-INDENT: 2em">·支持远程脚本和XML</P>
<P style="TEXT-INDENT: 2em">·支持本地和远程函数</P>
<P style="TEXT-INDENT: 2em">·单个或者多个XMLHTTP对象</P>
<P style="TEXT-INDENT: 2em">·以文本或者JavaScript XML/DOM文档对象方式返回后台数据</P>
<P style="TEXT-INDENT: 2em">·能支持POST和GET请求</P>
<P style="TEXT-INDENT: 2em">·后台代理函数来访问远程函数和数据</P>
<P style="TEXT-INDENT: 2em">·在所有的主要浏览器上测试过</P>
<P style="TEXT-INDENT: 2em">·在GNU GPL&amp;LGPL保护下发行</P>
<P style="TEXT-INDENT: 2em">3.2 SAJAX(可用，但是不是1.0版本;自从3月2005年)</P>
<P style="TEXT-INDENT: 2em"><A href="http://tech.163.com/special/w/0009158K/website.html" target=_blank><FONT color=#0066cc>网站</FONT></A>是：http://www.modernmethod.com/sajax/，直接把调用从Javascript发送到你的服务器端语言并再次回返。例如，调用一个javascript方法x_calculateBudget()，将先到达服务器和调用一个Java calculateBudget()方法，然后以javascript方式把值返回到x_calculateBudget_cb()。</P>
<P style="TEXT-INDENT: 2em">·便利从Javascript代理函数到后台操作的映射。</P>
<P style="TEXT-INDENT: 2em">·能够代理对众多服务器端平台（ASP/ColdFusion/Io/Lua/Perl/PHP/Python/Ruby）的调用。</P>
<P style="TEXT-INDENT: 2em">·开源许可。来自多方面贡献者。</P>
<P style="TEXT-INDENT: 2em">3.3 Javascipt对象标志(JSON)和JSON-RPC</P>
<P style="TEXT-INDENT: 2em">JSON(http://www.crockford.com/JSON/index.html)，是一个"胖的自由的XML选择"，而JSON-RPC(http://www.json-rpc.org/)是一种远程过程协议，类似于XML-RPC，强有力支持Javascript客户。</P>
<P style="TEXT-INDENT: 2em">·实现多服务器端平台(http://www.json-rpc.org/impl.xhtml)：Java，Python，Ruby，Perl。</P>
<P style="TEXT-INDENT: 2em">·针对每种平台有独立的打包和许可，如JSON-RPC-Java(http://oss.metaparadigm.com/jsonrpc/)。</P>
<P style="TEXT-INDENT: 2em">3.4 Javascript远程脚本(JSRS)(自从2000年)</P>
<P style="TEXT-INDENT: 2em">网址是：http://www.ashleyit.com/rs/jsrs/test.htm，直接把调用从Javascript发送到你的服务器端语言并再次回返。</P>
<P style="TEXT-INDENT: 2em">·知名的浏览器：IE4+，NS4.x，NS6.x，Mozilla，Opera7和Galeon。</P>
<P style="TEXT-INDENT: 2em">·服务器端支持：ASP，ColdFusion，PerlCGI，PHP,Python和JSP(servlet)。</P>
<P style="TEXT-INDENT: 2em">·开源许可。由Brent Ashley(http://www.ashleyit.com/)提供支持。</P>
<P style="TEXT-INDENT: 2em">4 服务器端：Java</P>
<P style="TEXT-INDENT: 2em">注意：许多现有的框架最近正在添加Java支持(例如struts)，我将在后面指出。</P>
<P style="TEXT-INDENT: 2em">4.1 WebORB for Java(自从2005年8月)</P>
<P style="TEXT-INDENT: 2em">网址：http://www.themidnightcoders.com/weborb/aboutWeborb.htm，是一个平台，支持<A href="http://tech.163.com/special/d/0009159F/developer.html" target=_blank><FONT color=#0066cc>开发</FONT></A>AJAX和基于Flash的胖客户端应用程序，并可以把它们与Java对象和XML Web服务相系起来。在线举例(http：//www.themidnightcoders.com/examples)</P>
<P style="TEXT-INDENT: 2em">·WebORB包括一个称作丰富的客户系统(http://www.themidnightcoders.com/rcs/index.htm)的客户端库。该丰富的客户系统提供一简单的在线api来绑定到并调用任何Java对象，XML Web服务或者EJB上的方法。</P>
<P style="TEXT-INDENT: 2em">·支持同步的和异步的方法调用。</P>
<P style="TEXT-INDENT: 2em">·并不要求在服务器端代码上作任何修改，不需要定制方法属性，特别的签名或者参数类型。★不要求<A href="http://tech.163.com/special/A/00091593/Arts1.html" target=_blank><FONT color=#0066cc>设计</FONT></A>时生成代理。</P>
<P style="TEXT-INDENT: 2em">·同步调用返回来自于该调用(不需要回叫)的数据。异步的调用依赖于一个回叫实现。</P>
<P style="TEXT-INDENT: 2em">·任何服务器端方法能被同步地或者异步地调用。</P>
<P style="TEXT-INDENT: 2em">·客户应用程序能向服务器对象请求指定的活动方式。结果，对象能被轻易地创建而不需任何特殊的<A href="http://tech.163.com/special/d/0009159F/developer.html" target=_blank><FONT color=#0066cc>编程</FONT></A>。</P>
<P style="TEXT-INDENT: 2em">·提供一个特定API来处理数据库查询结果-服务器代码能返回Data集合或者Data表，而客户端以一个特殊RecordSet JavaScript对象来显示这个结果。该对象提供一个方法以检索列名和行数据。</P>
<P style="TEXT-INDENT: 2em">·支持数据分页技术。客户应用程序能检索页面中的数据。</P>
<P style="TEXT-INDENT: 2em">·支持所有的服务器端参数类型并返回值-原型，字符串，复合类型，数组，本机.net集合，远程参考。</P>
<P style="TEXT-INDENT: 2em">·共有两种版本可用：标准版(自由)和专业版(商业许可)</P>
<P style="TEXT-INDENT: 2em">4.2 Echo 2(自从3月2005年)</P>
<P style="TEXT-INDENT: 2em">网址是：http://www.nextapp.com/products/echo2/，允许你用纯Java代码编写Ajax应用软件(范例(http://demo.nextapp.com/InteractiveTest/ia))。</P>
<P style="TEXT-INDENT: 2em">自动地生成HTML和Javascript。</P>
<P style="TEXT-INDENT: 2em">·协调浏览器和服务器之间的消息。消息形式为XML。</P>
<P style="TEXT-INDENT: 2em">·如果需要，可以手工编写定制的Javascript部件。</P>
<P style="TEXT-INDENT: 2em">·开源许可(Mozilla公共许可或者GNU LGPL)。源于Next App,Inc.(http://www.nextapp.com/)。</P>
<P style="TEXT-INDENT: 2em">4.3 Direct Web Remoting (DWR)(2005年)</P>
<P style="TEXT-INDENT: 2em">网址是：http://www.getahead.ltd.uk/dwr/，是一个框架，用于直接从Javascript代码中调用Java方法。</P>
<P style="TEXT-INDENT: 2em">·象SAJAX，能把Javascript中的调用传递到Java方法，并返回到Javascript回叫。</P>
<P style="TEXT-INDENT: 2em">·能与任何web框架（Struts，Tapestry，等等）一起使用。</P>
<P style="TEXT-INDENT: 2em">·开源许可(Apache(http://www.apache.org/LICENSE.txt))。由Joe Walker(http://www.getahead.ltd.uk/sg/space/joe/)所支持。被加入到WebWork(http://www.opensymphony.com/webwork/)版本。</P>
<P style="TEXT-INDENT: 2em">4.4 SWATO(2005年)</P>
<P style="TEXT-INDENT: 2em">网址是：http://swato.dev.java.net/，是一套可重用的和良好集成的Java/JavaScript库，它实现了一种更容易的方式来改变你的web应用程序的交互，它是通过AJAX方式实现。</P>
<P style="TEXT-INDENT: 2em">·服务器端Java库能被容易地配置到所有的Servlet 2.3+匹配的容器中。</P>
<P style="TEXT-INDENT: 2em">·客户端JavaScript库能工作在支持HttpXMLRequest的各种浏览器中。</P>
<P style="TEXT-INDENT: 2em">·使用JSON来在服务器端编组你的POJO数据。这样你能存取在任何JavaScript环境(HTML，XUL，SVG)中的远程数据，这种存取可以容易地通过硬编码或者与某种成熟的JavaScript库集成来实现。</P>
<P style="TEXT-INDENT: 2em">·提供一个简单的接口来使你的JavaScript代码可以与暴露在客户端的远程POJO交互(RPC等)。</P>
<P style="TEXT-INDENT: 2em">·使用web.xml中的&lt;servlet&gt;和&lt;filter&gt;的容易且灵活的配置，并能(但不是依赖)与Spring集成到一起。</P>
<P style="TEXT-INDENT: 2em">·提供了几个可帮助你快速开发web应用程序的组件(如自动完成的文本框，在线表单，在线列表，等等)。</P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">5 服务器端：Lisp </P>
<P></P>
<P style="TEXT-INDENT: 2em">5.1 CL-Ajax</P>
<P style="TEXT-INDENT: 2em">网址：http://cliki.net/cl-ajax，实现Javascript直接调用服务器端Lisp函数。</P>
<P style="TEXT-INDENT: 2em">·如下输出函数：</P>
<P style="TEXT-INDENT: 2em">(export-函数 #’my-函数) </P>
<P style="TEXT-INDENT: 2em">·可以产生带有参数的Javascript代理。</P>
<P style="TEXT-INDENT: 2em">·能回叫Javascript函数或者DOM对象。</P>
<P style="TEXT-INDENT: 2em">·可以被集成进SAJAX。</P>
<P style="TEXT-INDENT: 2em">·开源(定制，非常灵活，许可)。由[Richard Newman](http://www.holygoat.co.uk/)所维护。</P>
<P style="TEXT-INDENT: 2em">6 服务器端：.NET</P>
<P style="TEXT-INDENT: 2em">6.1 WebORB for.NET(自从8月2005年)</P>
<P style="TEXT-INDENT: 2em">网址：http://www.themidnightcoders.com/weborb/aboutWeborb.htm，是一个平台，用于<A href="http://tech.163.com/special/d/0009159F/developer.html" target=_blank><FONT color=#0066cc>开发</FONT></A>AJAX和基于Flash的胖客户端应用程序，并能把它们连接到.NET对象和XML Web服务。(在线举例(http://www.themidnightcoders.com/examples))</P>
<P style="TEXT-INDENT: 2em">·WebORB包括一个客户端库，名叫Rich Client System(http://www.themidnightcoders.com/rcs/index.htm)。Rich Client System提供一简单的在线api以绑定到和调用任何.NET对象或者XML Web服务上的任何方法。</P>
<P style="TEXT-INDENT: 2em">·支持同步和异步的方法调用</P>
<P style="TEXT-INDENT: 2em">·并不要求在服务器端代码上作任何修改，不需要定制方法属性，特别的签名或者参数类型。**不要求<A href="http://tech.163.com/special/A/00091593/Arts1.html" target=_blank><FONT color=#0066cc>设计</FONT></A>时代理生成。</P>
<P style="TEXT-INDENT: 2em">·同步调用返回来自于该调用的数据(不需要回叫)。异步的调用依赖于一个回叫实现。</P>
<P style="TEXT-INDENT: 2em">·任何服务器端方法能被同步地或者异步地调用。</P>
<P style="TEXT-INDENT: 2em">·客户应用程序能向服务器对象请求指定的活动方式。结果，对象能被轻易地创建而不需任何特殊的<A href="http://tech.163.com/special/d/0009159F/developer.html" target=_blank><FONT color=#0066cc>编程</FONT></A>。</P>
<P style="TEXT-INDENT: 2em">·提供一个特定API来处理数据库查询结果-服务器代码能返回DataSet或者DataTable，而客户端以一个特殊RecordSet JavaScript对象来显示这个结果。该对象提供一个方法以检索列名和行数据</P>
<P style="TEXT-INDENT: 2em">·支持数据页面技术。客户端应用程序能检索页面中的数据。</P>
<P style="TEXT-INDENT: 2em">·支持所有的服务器端参数类型并返回值-原型，字符串，复合类型，数组，本机.net集合，远程参考</P>
<P style="TEXT-INDENT: 2em">·共有两种版本可用的：标准版(自由)和专业版(商业许可)</P>
<P style="TEXT-INDENT: 2em">6.2 Ajax.NET(自从3月2005年)</P>
<P style="TEXT-INDENT: 2em">网址是：http://ajax.schwarz-interactive.de/，是一个库，实现从Javascript到服务器端.NET的存取。</P>
<P style="TEXT-INDENT: 2em">·象SAJAX，能把Javascript中的调用传递到.NET方法，并返回到Javascript回叫。</P>
<P style="TEXT-INDENT: 2em">·能存取来自于JavaScript的会话数据。</P>
<P style="TEXT-INDENT: 2em">·缓存结果</P>
<P style="TEXT-INDENT: 2em">·自由使用，可用的源码，未指定使用许可。由Michael Schwarz(http://weblogs.asp.net/mschwarz/)所维护。</P>
<P style="TEXT-INDENT: 2em">·不允许改变源代码，用属性标记方法</P>
<P style="TEXT-INDENT: 2em">·完整的类支持以返回客户端JavaScript值</P>
<P style="TEXT-INDENT: 2em">·使用HtmlControls来进行输入和返回值</P>
<P style="TEXT-INDENT: 2em">·可以返回数据表，数据集，数据视图，数组和集合</P>
<P style="TEXT-INDENT: 2em">7 服务器端：PHP</P>
<P style="TEXT-INDENT: 2em">7.1 AjaxAC(自从2005年4月)</P>
<P style="TEXT-INDENT: 2em">网址是：http://ajax.zervaas.com.au/，用单个的PHP类封装了完整的应用程序。</P>
<P style="TEXT-INDENT: 2em">·所有的应用程序代码是自包含在单个类中(附加另外一些JavaScript库)</P>
<P style="TEXT-INDENT: 2em">·干净利索地调用PHP文件/HTML页面。只需创建应用程序类，然后参照应用程序JavaScript和依附任何需要的HTML元素到该应用程序。 </P>
<P style="TEXT-INDENT: 2em">·容易地处理JavaScript事件的内嵌功能</P>
<P style="TEXT-INDENT: 2em">·创建子需要并处理它们的内嵌功能</P>
<P style="TEXT-INDENT: 2em">·允许定制的配置值，因此某些单元能在运行时间设置</P>
<P style="TEXT-INDENT: 2em">·无凌乱的JavaScript代码夹杂在调用HTML的代码中-所有的事件是被动态依附的</P>
<P style="TEXT-INDENT: 2em">·由于以上两个原因容易和模板引擎集成到一起</P>
<P style="TEXT-INDENT: 2em">·容易钩到（hook in to）已有的PHP类或者MySQL数据库以返回来自于子需求的数据</P>
<P style="TEXT-INDENT: 2em">·能够容易地进一步生成JavaScript对象的可扩展的窗口小组件结构(但是还需要做一些工作)</P>
<P style="TEXT-INDENT: 2em">背景：</P>
<P style="TEXT-INDENT: 2em">·开源许可(Apache2.0)。由Zervaas Enterprises(http://ajax.zervaas.com.au/)支持</P>
<P style="TEXT-INDENT: 2em">7.2 JPSpan</P>
<P style="TEXT-INDENT: 2em">网址是：http://jpspan.sourceforge.net/wiki/doku.php，直接把Javascript调用传递到PHP函数。</P>
<P style="TEXT-INDENT: 2em">·进行了严肃的单元测试。</P>
<P style="TEXT-INDENT: 2em">·开源许可(PHP)。</P>
<P style="TEXT-INDENT: 2em">7.3 XAJAX</P>
<P style="TEXT-INDENT: 2em">网址是：http://xajax.sf.net，直接把Javascript调用传递到PHP函数。</P>
<P style="TEXT-INDENT: 2em">·使用Javascript代理来调用PHP脚本。</P>
<P style="TEXT-INDENT: 2em">·开源。由J.Max Wilson所创。</P>
<P style="TEXT-INDENT: 2em">8 服务器端：Ruby</P>
<P style="TEXT-INDENT: 2em">Ruby On Rails(http://www.rubyonrails.org/)是一个通常的强力支持Ajax的web框架：</P>
<P style="TEXT-INDENT: 2em">·当Ajax出现的时候Rails还处于其发展的早期，因此Ajax可能逐渐成为Rails框架的核心。</P>
<P style="TEXT-INDENT: 2em">·生成浏览器中大多数/全部的窗口小组件和动画的Javascript脚本。</P>
<P style="TEXT-INDENT: 2em">·支持服务器端调用。</P>
<P style="TEXT-INDENT: 2em">·调度支持。</P>
<P style="TEXT-INDENT: 2em">·开源许可。</P><BR><BR>
<P id=TBPingURL>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=542157</P></DIV><img src ="http://www.blogjava.net/iNeo/aggbug/22546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iNeo/" target="_blank">只牵这只狗</a> 2005-12-05 13:19 <a href="http://www.blogjava.net/iNeo/archive/2005/12/05/22546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax: 一个建立Web应用的新途径[z]</title><link>http://www.blogjava.net/iNeo/archive/2005/12/05/22490.html</link><dc:creator>只牵这只狗</dc:creator><author>只牵这只狗</author><pubDate>Mon, 05 Dec 2005 00:29:00 GMT</pubDate><guid>http://www.blogjava.net/iNeo/archive/2005/12/05/22490.html</guid><wfw:comment>http://www.blogjava.net/iNeo/comments/22490.html</wfw:comment><comments>http://www.blogjava.net/iNeo/archive/2005/12/05/22490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iNeo/comments/commentRss/22490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iNeo/services/trackbacks/22490.html</trackback:ping><description><![CDATA[<DIV class=postTitle>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果要问做什么事是最有吸引力，那就是创建Web应用。毕竟，上次你听到有人称赞某<A href="http://tech.163.com/production/"><FONT color=#0066cc>产品</FONT></A>的交互<A href="http://tech.163.com/special/A/00091593/Arts1.html" target=_blank><FONT color=#0066cc>设计</FONT></A>是什么时候的事了？(除了iPod之外) 它们都很cool, 而且都是很创新的项目。 </DIV>
<DIV class=postText>
<P style="TEXT-INDENT: 2em">抛开这些不管，Web设计者们对设计交互式的Web没有什么更好的办法，却对我们做桌面软件的同事投去少许羡慕的目光.桌面应用程序有丰富的界面以及对于Web程序来说无法比拟的响应能力。同样，Web的快速发展，在我们所提供的体验和用户从桌面应用程序所得到的体验间产生巨大的差距 </P>
<P style="TEXT-INDENT: 2em">而如今差距正在消失。请看看“Google建议(Google Suggest)”. 观察它按你的输入显示建议条目的更新速度，几乎是立即更新的。再看看"Google Maps". 放大，用你的鼠标搬动和<A href="http://tech.163.com/special/r/000915I8/roll.html" target=_blank><FONT color=#0066cc>滚动</FONT></A>。这些动作几乎是立即响应的，不用等待页面刷新。 </P>
<P style="TEXT-INDENT: 2em">"Google Suggest"和"Google Maps" 是采用Ajax技术的两个典型例子。Ajax是Asynchronous JavaScript and XML的简称，它表现出一个Web<A href="http://tech.163.com/special/d/0009159F/developer.html" target=_blank><FONT color=#0066cc>开发</FONT></A>上的根本转变，那就是，Web上可能做些什么. Ajax的定义</P>
<P style="TEXT-INDENT: 2em">Ajax不是一个技术，它实际上是几种技术，每种技术都有其独特这处，合在一起就成了一个功能强大的新技术。Ajax包括： </P>
<UL>
<LI>XHTML和CSS 
<LI>使用文档对象模型(Document Object Model)作动态显示和交互 
<LI>使用XML和XSLT做数据交互和操作 
<LI>使用XMLHttpRequest进行异步数据接收 
<LI>使用JavaScript将它们绑定在一起 </LI></UL>
<P></P>
<P style="TEXT-INDENT: 2em">传统的web应用模型工作起来就象这样：大部分界面上的用户动作触发一个连接到Web服务器的HTTP请求。服务器完成一些处理---接收数据，处理计算，再访问其它的数据库系统，最后返回一个HTML页面到客户端。这是一个老套的模式，自采用超文本作为web使用以来，一直都这样用, 但看过《The Elements of User Experience》的读者一定知道，是什么限制了Web界面没有桌面软件那么好用。 </P>
<P style="TEXT-INDENT: 2em"></P>
<CENTER><IMG alt="" src="http://cimg.163.com/catchpic/A/A1/A1235EBE7D209A4B9E518EB1ADFC82C8.png" border=0></CENTER>
<P></P>
<P style="TEXT-INDENT: 2em"><I>图1: 传统Web应用模型(左)与Ajax模型的比较(右).</I> </P>
<P style="TEXT-INDENT: 2em">这种旧的途径让我们认识到了许多技术，但它不会产生很好的用户体验。当服务器正在处理自己的事情的时候，用户在做什么？没错，等待。每一个动作，用户都要等待。 </P>
<P style="TEXT-INDENT: 2em">很明显，如果我们按桌面程序的思维设计Web应用，我们不愿意让用户总是等待。当界面加载后，为什么还要让用户每次再花一半的时间从服务取数据？实际上，为什么老是让用户看到程序去服务器取数据呢？ Ajax如何不同凡响</P>
<P style="TEXT-INDENT: 2em">通过在用户和服务器之间引入一个Ajax引擎，可以消除Web的开始－停止－开始－停止这样的交互过程. 它就像增加了一层机制到程序中，使它响应更灵敏，而它的确做到了这一点。 </P>
<P style="TEXT-INDENT: 2em">不像加载一个页面一样，在会话的开始，浏览器加载了一个Ajax引擎---采用JavaScript编写并且通常在一个隐藏frame中。这个引擎负责绘制用户界面以及与服务器端通讯。Ajax引擎允许用异步的方式实现用户与程序的交互－－不用等待服务器的通讯。所以用户再不不用打开一个空白窗口，看到等待光标不断的转，等待服务器完成后再响应。 </P>
<P style="TEXT-INDENT: 2em"></P>
<CENTER><IMG alt="" src="http://cimg.163.com/catchpic/8/83/8374722037E135C5C90CCF8DF2B47118.png" border=0></CENTER>
<P></P>
<P style="TEXT-INDENT: 2em"><I>图 2: 传统Web应用的同步交互过程(上)和Ajax应用的异步交互过程的比较(下).</I> </P>
<P style="TEXT-INDENT: 2em">通常要产生一个HTTP请求的用户动作现在通过JavaScript调用Ajax引擎来代替. 任何用户动作的响应不再要求直接传到服务器---例如简单的数据校验，内存中的数据编辑，甚至一些页面导航---引擎自己就可以处理它. 如果引擎需要从服务器取数据来响应用户动作---假设它提交需要处理的数据，载入另外的界面代码，或者接收新的数据---引擎让这些工作异步进行，通常使用XML, 不用再担误用户界面的交互。 谁在使用Ajax</P>
<P style="TEXT-INDENT: 2em">在采用Ajax的开发上面，Google做了巨大的投资。去年Google所有主要的产品都用了这项技术---Orkut, Gmail, 以及最近的beta版的Google Groups, Google Suggest和Google Maps---它们全是Ajax的应用。(要想了解更多这些Ajax实际的技术细节，请看它们的分析文章:Gmail, Google Suggest, Google Maps). 其它的像：Flickr, 采用许多人们喜欢的Ajax特性，还有Amazon的A9.com搜索引擎也采用类似的技术。 </P>
<P style="TEXT-INDENT: 2em">这些项目证明了Ajax不只是学术上的，也有许多真实世界成功应用。这不是什么实验室里的技术。Ajax的应用可大可小，从非常简单的，像单一功能的Google Suggest到非常复杂的Google Maps. </P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em"><STRONG><FONT face=宋体>Ajax：Web应用开发新理念</FONT></STRONG> </P>
<P><FONT face=宋体,Arial>如果要用“充满魅力”一词来形容当前流行的交互设计，那么首推创建Web应用程序。毕竟，当你最终听到某人倾倒于产品的交互设计，难道不是在网上？（Okay，我承认iPod除外）。所有追求酷，追求创新的新项目都是联机应用的。<BR><BR>尽管如此，Web交互设计人员还是不可避免地对创建桌面应用软件的同事怀有一丝妒忌。桌面应用程序所拥有的功能丰富性和响应能力似乎是Web目前无法达到的。简单地让Web应用程序迅速蔓延，会在我们所提供的体验和用户从桌面应用程序获取的体验之间形成一道鸿沟。<BR><BR>但现在，这道鸿沟正被逐渐填平。让我们看看Google Suggest。根据您输入的内容，相关的条目便几乎立即更新。我们再看Google Maps。利用光标，在刻度线上移动来放大地图或者缩小，所有的一切几乎都是即时的，完全不用等待页面的刷新。<BR><BR>Google Suggest和Google Maps就是这种新型Web应用程序的两个例子，我在Adaptive Path上把这种理念称为 Ajax。也就是Asynchronous JavaScript + XML的简写，它预示着Web可能发生一次重大的变革。<BR><BR>Ajax的定义<BR><BR>Ajax并不是一种新技术，它实际上是几种已经在各自领域大行其道的技术的强强结合。Ajax由以下内容组成：<BR><BR>· 基于标准化的XHTML和CSS；<BR><BR>通过DOM（Document Object Model）实现动态显示和交互；<BR>· 通过XML和XSLT来进行数据交换和处理；<BR><BR>使用XMLHttpRequest通过异步方式获取数据；<BR>使用JavaScript来整合以上所有的技术<BR>经典的Web应用程序模型工作方式如下：大多数用户动作在界面上激发一个HTTP请求到web服务器。服务器做一些处理——获取数据，处理数字，与现有的应用系统进行沟通——最后返回HTML到客户端。这样的模型适合于以超文本为基础的Web应用程序，但作为一个强调用户体验的狂热分子（The Elements of User Experience一书的拥护者），我们认为超文本造就Web成功的东西，却并不一定满足软件应用程序的要求。<BR><BR>传统的Web应用程序模型技术上来说意义非凡，但它并不适用于创建完美的用户体验。当服务器在做数据处理的时候，用户在干什么呢？没错，他们在等待。一个任务所需的步骤越多，用户需要等待的次数也越多。<BR><BR>显然，当我们设计Web应用程序的时候，我们不应该让用户傻等。界面一旦加载完成，为什么还要因为程序需要从服务器传输一些东西而中断用户交互呢？实际上，用户为什么要看到程序与服务器的联系？<BR><BR>为什么Ajax与众不同<BR><BR>Ajax应用程序摒弃了“开—关—开—关”的交互形式，在用户与服务器之间引入了一个中间件——Ajax引擎。看上去在应用程序上添加一个层面会减少响应，但事实上恰好相反。<BR><BR>不同于加载一个网页是，用户会话一旦建立，浏览器就加载一个Ajax引擎——由JavaScript编写并通常放置在一个隐藏帧内。引擎的责任包括构造用户操作界面以及与服务器的沟通。Ajax引擎允许用户与应用程序的交互异步进行——无须直接访问服务器。所以用户永远不会在服务器处理数据期间瞪眼面对一个白屏和沙漏图标。<BR><BR><BR><BR>用户动作的处理由传统的表单提交来激发一个HTTP请求，变为Javascript调用Ajax引擎。给用户的回应不用等到服务器处理后返回——比如简单的数据校验，在内存中编辑数据，甚至一些导航功能——都直接由引擎来处理。如果引擎需要从服务器获取些数据——提交数据给服务器处理，加载额外的界面代码，或者获取新数据——引擎通常以XML格式激发一个异步的请求，用户端完全没有被中断的感觉。<BR><BR>谁在使用Ajax<BR><BR>Google在Ajax开发上投入了巨大的精力。去年Google推出的几大产品——Orkut、Gmail、Google Groups最终测试版、Google Suggest和Google Maps——都是基于Ajax的应用。其他还包括：有着很多备受人们赞誉特性的Flickr（http://www.flickr.com/）基于Ajax，Amazon的A9.com搜索引擎也使用了类似的技术。<BR><BR>这些项目证实Ajax并不是一个技术性的实验品，它可以实践在现实世界的应用中。它也不是一种只能在实验室中运用的技术。Ajax适用于从简单的单函数Google Suggest到非常复杂的Google Maps等各种规模的应用程序。<BR><BR>在Adaptive Path，我们已经基于Ajax的理念工作了好几个月，我们意识到我们也仅仅是接触到Ajax所能带来的非凡体验的一点皮毛。Ajax是Web应用程序的一个重要发展，并且其重要性还在逐步增长。因为许多开发人员已经熟悉Ajax所包含的技术，我们期望看到更多的组织能够像Google那样通过Ajax获得更大的竞争优势。<BR><BR>更进一步<BR><BR>创建Ajax应用程序所面临的最大挑战并不在技术上。Ajax的核心技术是成熟的，稳定并被广泛应用着。这些挑战在于：应用设计人员忘掉所有我们所熟知的网络限制，去想像更宽广、更深远的可能情况。<BR><BR>接下来会很有趣。<BR><BR>Ajax Q&amp;A<BR><BR>2005年3月13日：自从Jesse发表了该文，他收到了不计其数的咨询Ajax问题的信件，Jesse回复了其中有代表性的问题并整理成Q&amp;A。<BR><BR>Q：是Adaptive Path还是Google发明了Ajax？Adaptive Path是否协助开发了Google的Ajax应用程序？<BR>A：Ajax并不是由Adaptive Path或者Google发明的。Google最新的产品是Ajax应用程序最具代表性的例子。Adaptive Path没有参与Google的开发，但我们在为其他的一些客户做一些与Ajax相关的工作。<BR><BR>Q：Adaptive Path会出售Ajax组件或者注册Ajax这个商标吗？我从哪里可以下载到它？<BR>A：Ajax并不是一个具体的软件或程序，它是一种理念——关于用合理的技术构建Web应用程序架构的思考。Ajax这个名称和它的理念都不是Adaptive Path私有的。<BR><BR>Q：Ajax只不过是XMLHttpRequest的别名吗？<BR>A：不是。XMLHttpRequest只是Ajax的一个组成部分。XMLHttpRequest让客户端与服务器的异步通讯成为可能；Ajax是本文描述的一个整体理念，它不仅依赖于XMLHttpRequest，还包括CSS、DOM和其他技术等等。<BR><BR>Q：为什么你会起这么个名字？<BR>A：我们需要一个简短的表示“Asynchronous JavaScript+CSS+DOM+XMLHttpRequest”的新词来与客户谈我们的理念。<BR><BR>Q：与服务器异步通讯的技术产生很多年了，Ajax何以称为新理念？<BR>A：Ajax包含的技术被大量应用在现实世界中以至于改变了Web的基础交互模式是一个新现象。Ajax是针对现在而言，因为这些技术离工业化应用还需要很多时间去开发。<BR><BR>Q：Ajax是一个技术平台或者架构吗？<BR>A：都是。Ajax是一系列技术的无缝集合。<BR><BR>Q：Ajax最适合于什么样的应用？<BR>A：我也不知道。因为这是一个相当新的理念，就我们的理解而言，Ajax应用还处于初期阶段。有时候传统的Web应用程序模型可能更为适合。<BR><BR>Q：是否可以理解为Adaptive Path就是取代anti-Flash？<BR>A：完全不是。Macromedia是Adaptive Path的客户之一，并且我们长期为Flash技术做技术支持。待Ajax成熟后，我认为对于具体的问题，Ajax有时候会是一个更好的解决方案，同样有时候Flash也许做得更好。我们也有兴趣探讨两者的结合。（比如Flickr，它结合了两者）。<BR><BR>Q：Ajax在易用性和浏览器兼容性上是否有限制？Ajax是否会与后退按钮冲突？Ajax与REST（雷达电子扫描技术）兼容吗？Ajax的开发有哪些安全考虑？Ajax能为那些禁止Javascript运行的用户工作吗？<BR>A：所有这些问题的答案，我只能说“可能”。已经有很多的开发者着手这些方面的工作。要评估Ajax的所有限制，我想还需要做很多工作，我们希望Ajax开发社区能揭示更多的信息。<BR><BR>Q：你所提到的Google的一些应用中实际上并没有使用XML。我一定要在Ajax应用中使用XML或XSLT吗？<BR>A：不是，对于Ajax客户端，XML作为数据交换的载体是支持最为完善的（XMLHttpRequest，DOM支持）。当然，你没有理由不接受可以达到同样效果的技术，例如JavaScript Object Notation（http://www.crockford.com/JSON/）或者其他类似的数据交换的格式。<BR><BR>Q：Ajax应用比传统的Web应用程序方便开发吗？<BR>A：也不尽然。Ajax的应用不可避免要在客户端运行复杂的JavaScript脚本。编写复杂并且高效稳定的脚本并不是一件容易的事情，优秀的开发工具和框架能帮助我们接受这一挑战。<BR><BR>Q：Ajax应用程序总比传统的Web应用程序程序更友好吗？<BR>A：不一定，Ajax给交互设计人员更多的灵活性。能力越大，责任也越大。我们必须小心使用Ajax去改善用户体验，而不是把它弄得更糟。</FONT></P><BR><BR>
<P id=TBPingURL>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=542160</P></DIV><img src ="http://www.blogjava.net/iNeo/aggbug/22490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iNeo/" target="_blank">只牵这只狗</a> 2005-12-05 08:29 <a href="http://www.blogjava.net/iNeo/archive/2005/12/05/22490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>