﻿<?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博客-A JavaScript Fancier-随笔分类-Web2.0相关内容</title><link>http://www.cnitblog.com/yemoo/category/3113.html</link><description>伟大的javascript技术研究中...</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 15:52:25 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 15:52:25 GMT</pubDate><ttl>60</ttl><item><title>jQuery技巧总结 </title><link>http://www.cnitblog.com/yemoo/archive/2007/09/28/34140.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Fri, 28 Sep 2007 04:23:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/09/28/34140.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34140.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/09/28/34140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34140.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34140.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br><font color=#0d80bd><font color=#000000><strong>注：</strong>这是偶以前发在blueidea上的文章，当时反应还不错，发现自己blog上还没有，赶紧补上。<br>========================================================<br><br></font><font color=#000000><strong>一、简介<br><br>1.1、概述<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;随着WEB2.0及ajax思想在互联网上的快速发展传播，陆续出现了一些优秀的Js框架，其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等，通过将这些JS框架应用到我们的项目中能够使程序员从设计和书写繁杂的JS应用中解脱出来，将关注点转向功能需求而非实现细节上，从而提高项目的开发速度。</font><br><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jQuery是继prototype之后的又一个优秀的Javascript框架。它是由 John Resig 于 2006 年初创建的，它有助于简化 JavaScript&#8482; 以及Ajax 编程。有人使用这样的一比喻来比较prototype和jQuery：prototype就像Java，而jQuery就像ruby. 它是一个简洁快速灵活的JavaScript框架，它能让你在你的网页上简单的操作文档、处理事件、实现特效并为Web页面添加Ajax交互。<br><br>它具有如下一些特点：<br>1、代码简练、语义易懂、学习快速、文档丰富。<br>2、jQuery是一个轻量级的脚本，其代码非常小巧，最新版的JavaScript包只有20K左右。<br>3、jQuery支持CSS1-CSS3,以及基本的xPath。<br>4、jQuery是跨浏览器的，它支持的浏览器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。<br>5、可以很容易的为jQuery扩展其他功能。<br>6、能将JS代码和HTML代码完全分离，便于代码和维护和修改。<br>7、插件丰富，除了jQuery本身带有的一些特效外，可以通过插件实现更多功能，如表单验证、tab导航、拖放效果、表格排序、DataGrid，树形菜单、图像特效以及ajax上传等。<br><br>jQuery的设计会改变你写JavaScript代码的方式，降低你学习使用JS操作网页的复杂度，提高网页JS开发效率，无论对于js初学者还是资深专家，jQuery都将是您的首选。<br>jQuery适合于设计师、开发者以及那些还好者，同样适合用于商业开发，可以说jQuery适合任何JavaScript应用的地方，可用于不同的Web应用程序中。<br>官方站点：</font><a href="http://jquery.com/" target=_blank><u><font color=#0000ff>http://jquery.com/</font></u></a><font color=#000000>&nbsp;&nbsp;中文站点：</font><a href="http://jquery.org.cn/" target=_blank><u><font color=#0000ff>http://jquery.org.cn/ </font></u></a><br><br><font color=#000000><strong>1.2、目的<br></strong>通过学习本文档，能够对jQuery有一个简单的认识了解，清楚JQuery与其他JS框架的不同，掌握jQuery的常用语法、使用技巧及注意事项。<br><br></font><font color=#000000><strong>二、使用方法<br></strong>在需要使用JQuery的页面中引入JQuery的js文件即可。<br>例如：&lt;script type="text/javascript" src="js/jquery.js"&gt;&lt;/script&gt;<br>引入之后便可在页面的任意地方使用jQuery提供的语法。<br><br></font><font color=#000000><strong>三、学习教程及参考资料<br></strong>请参照《jQuery中文API手册》和</font><a href="http://jquery.org.cn/visual/cn/index.xml" target=_blank><u><font color=#0000ff>http://jquery.org.cn/visual/cn/index.xml</font></u></a><br><font color=#000000>推荐两篇不错的jquery教程：《jQuery的起点教程》和《使用 jQuery 简化 Ajax 开发》<br>(说明：以上文档都放在了</font><a href="http://bbs.blueidea.com/attachment.php?aid=40804" target=_blank><u><font color=#0000ff>【附件】</font></u></a><font color=#000000>中)<br><br></font><font color=#000000><strong>四、语法总结和注意事项<br><br></strong></font><span style="COLOR: red">1、关于页面元素的引用</span><br><font color=#000000>通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法，且返回的对象为jquery对象（集合对象），不能直接调用dom定义的方法。<br><br></font><span style="COLOR: red">2、jQuery对象与dom对象的转换</span><br><font color=#000000>只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的，调用方法时要注意操作的是dom对象还是jquery对象。<br>普通的dom对象一般可以通过$()转换成jquery对象。<br>如：$(document.getElementById("msg"))则为jquery对象，可以使用jquery的方法。<br>由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项，一般可通过索引取出。<br>如：$("#msg")[0]，$("div").eq(1)[0]，$("div").get()[1]，$("td")[5]这些都是dom对象，可以使用dom中的方法，但不能再使用Jquery的方法。<br>以下几种写法都是正确的：<br>$("#msg").html();<br>$("#msg")[0].innerHTML;<br>$("#msg").eq(0)[0].innerHTML;<br>$("#msg").get(0).innerHTML;<br><br></font><span style="COLOR: red">3、如何获取jQuery集合的某一项</span><br><font color=#000000>对于获取的元素集合，获取其中的某一项（通过索引指定）可以使用</font><span style="COLOR: blue">eq</span><font color=#000000>或</font><span style="COLOR: blue">get(n)</span><font color=#000000>方法或者索引号获取，</font><span style="COLOR: orange">要注意，eq返回的是jquery对象，而get(n)和索引返回的是dom元素对象</span><font color=#000000>。对于jquery对象只能使用jquery的方法，而dom对象只能使用dom的方法，如要获取第三个&lt;div&gt;元素的内容。有如下两种方法：<br>$("div").eq(2).html();&nbsp;&nbsp;&nbsp;&nbsp;//调用jquery对象的方法<br>$("div").get(2).innerHTML;&nbsp;&nbsp;//调用dom的方法属性<br><br></font><span style="COLOR: red">4、同一函数实现set和get</span><br><font color=#000000>Jquery中的很多方法都是如此，主要包括如下几个：<br>$("#msg").html();&nbsp;&nbsp;&nbsp;&nbsp;//返回id为msg的元素节点的html内容。<br>$("#msg").html("&lt;b&gt;new content&lt;/b&gt;");&nbsp;&nbsp;<br>//将&#8220;&lt;b&gt;new content&lt;/b&gt;&#8221; 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content<br><br>$("#msg").text();&nbsp;&nbsp;&nbsp;&nbsp;//返回id为msg的元素节点的文本内容。<br>$("#msg").text("&lt;b&gt;new content&lt;/b&gt;");&nbsp;&nbsp;<br>//将&#8220;&lt;b&gt;new content&lt;/b&gt;&#8221; 作为普通文本串写入id为msg的元素节点内容中,页面显示&lt;b&gt;new content&lt;/b&gt;<br><br>$("#msg").height();&nbsp;&nbsp;&nbsp;&nbsp;//返回id为msg的元素的高度<br>$("#msg").height("300");&nbsp;&nbsp;//将id为msg的元素的高度设为300<br>$("#msg").width();&nbsp;&nbsp;&nbsp;&nbsp;//返回id为msg的元素的宽度<br>$("#msg").width("300");&nbsp;&nbsp;//将id为msg的元素的宽度设为300<br><br>$("input").val(");&nbsp;&nbsp;//返回表单输入框的value值<br>$("input").val("test");&nbsp;&nbsp;//将表单输入框的value值设为test<br><br>$("#msg").click();&nbsp;&nbsp;//触发id为msg的元素的单击事件<br>$("#msg").click(fn);&nbsp;&nbsp;//为id为msg的元素单击事件添加函数<br>同样blur,focus,select,submit事件都可以有着两种调用方法<br><br></font><span style="COLOR: red">5、集合处理功能</span><br><font color=#000000>对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理，jquery已经为我们提供的很方便的方法进行集合的处理。<br>包括两种形式：<br>$("p").each(function(i){this.style.color=['#f00','#0f0','#00f'][i]})&nbsp;&nbsp;<br>//为索引分别为0，1，2的p元素分别设定不同的字体颜色。<br><br>$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})&nbsp;&nbsp;<br>//实现表格的隔行换色效果<br><br>$("p").click(function(){alert($(this).html())})&nbsp;&nbsp;&nbsp;&nbsp;<br>//为每个p元素增加了click事件，单击某个p元素则弹出其内容<br><br></font><span style="COLOR: red">6、扩展我们需要的功能</span><br><font color=#000000>$.extend({<br>&nbsp;&nbsp;min: function(a, b){return a &lt; b?a:b; },<br>&nbsp;&nbsp;max: function(a, b){return a &gt; b?a:b; } <br>});&nbsp;&nbsp;//为jquery扩展了min,max两个方法<br>使用扩展的方法（通过&#8220;$.方法名&#8221;调用）：<br>alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));<br><br></font><span style="COLOR: red">7、支持方法的连写</span><br><font color=#000000>所谓连写，即可以对一个jquery对象连续调用各种不同的方法。<br>例如：<br>$("p").click(function(){alert($(this).html())})<br>.mouseover(function(){alert('mouse over event')})<br>.each(function(i){this.style.color=['#f00','#0f0','#00f'][i]});<br><br></font><span style="COLOR: red">8、操作元素的样式</span><br><font color=#000000>主要包括以下几种方式：<br>$("#msg").css("background");&nbsp;&nbsp;&nbsp;&nbsp;//返回元素的背景颜色<br>$("#msg").css("background","#ccc")&nbsp;&nbsp;//设定元素背景为灰色<br>$("#msg").height(300); $("#msg").width("200");&nbsp;&nbsp;//设定宽高<br>$("#msg").css({ color: "red", background: "blue" });//以名值对的形式设定样式<br>$("#msg").addClass("select");&nbsp;&nbsp;//为元素增加名称为select的class<br>$("#msg").removeClass("select");&nbsp;&nbsp;//删除元素名称为select的class<br>$("#msg").toggleClass("select");&nbsp;&nbsp;//如果存在（不存在）就删除（添加）名称为select的class<br><br></font><span style="COLOR: red">9、完善的事件处理功能</span><br><font color=#000000>Jquery已经为我们提供了各种事件处理方法，我们无需在html元素上直接写事件，而可以直接为通过jquery获取的对象添加事件。<br>如：<br>$("#msg").click(function(){alert("good")})&nbsp;&nbsp;//为元素添加了单击事件<br>$("p").click(function(i){this.style.color=['#f00','#0f0','#00f'][i]})<br>//为三个不同的p元素单击事件分别设定不同的处理<br></font><font color=#000000><strong>jQuery中几个自定义的事件：<br></strong>（1）</font><span style="COLOR: blue">hover(fn1,fn2)：</span><font color=#000000>一个模仿悬停事件（鼠标移动到一个对象上面及移出这个对象）的方法。当鼠标移动到一个匹配的元素上面时，会触发指定的第一个函数。当鼠标移出这个元素时，会触发指定的第二个函数。<br>//当鼠标放在表格的某行上时将class置为over，离开时置为out。<br>$("tr").hover(function(){<br>$(this).addClass("over");<br>},<br>&nbsp;&nbsp;function(){<br>&nbsp;&nbsp; $(this).addClass("out"); <br>});<br>（2）</font><span style="COLOR: blue">ready(fn):</span><font color=#000000>当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。<br>$(document).ready(function(){alert("Load Success")})<br>//页面加载完毕提示&#8220;Load Success&#8221;,相当于onload事件。与$(fn)等价<br>（3）</font><span style="COLOR: blue">toggle(evenFn,oddFn): </span><font color=#000000>每次点击时切换要调用的函数。如果点击了一个匹配的元素，则触发指定的第一个函数，当再次点击同一元素时，则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。<br>&nbsp;&nbsp;//每次点击时轮换添加和删除名为selected的class。<br>&nbsp;&nbsp;$("p").toggle(function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;$(this).addClass("selected");&nbsp;&nbsp; <br>&nbsp;&nbsp;},function(){<br>&nbsp;&nbsp;&nbsp;&nbsp; $(this).removeClass("selected"); <br>&nbsp;&nbsp;});<br>（4）</font><span style="COLOR: blue">trigger(eventtype):</span><font color=#000000> 在每一个匹配的元素上触发某类事件。<br>例如：<br>&nbsp;&nbsp;$("p").trigger("click");&nbsp;&nbsp;&nbsp;&nbsp;//触发所有p元素的click事件<br>（5）</font><span style="COLOR: blue">bind(eventtype,fn)，unbind(eventtype): </span><font color=#000000>事件的绑定与反绑定<br>从每一个匹配的元素中（添加）删除绑定的事件。<br>例如：<br>$("p").bind("click", function(){alert($(this).text());});&nbsp;&nbsp;//为每个p元素添加单击事件<br>$("p").unbind();&nbsp;&nbsp;//删除所有p元素上的所有事件<br>$("p").unbind("click")&nbsp;&nbsp;//删除所有p元素上的单击事件<br><br></font><span style="COLOR: red">10、几个实用特效功能</span><br><font color=#000000>其中toggle()和slidetoggle()方法提供了状态切换功能。<br>如toggle()方法包括了hide()和show()方法。<br>slideToggle()方法包括了slideDown()和slideUp方法。<br><br></font><span style="COLOR: red">11、几个有用的jQuery方法</span><br><span style="COLOR: blue">$.browser.浏览器类型：</span><font color=#000000>检测浏览器类型。有效参数：safari, opera, msie, mozilla。如检测是否ie：$.browser.isie，是ie浏览器则返回true。<br></font><span style="COLOR: blue">$.each(obj, fn)：</span><font color=#000000>通用的迭代函数。可用于近似地迭代对象和数组（代替循环）。<br>如<br>$.each( [0,1,2], function(i, n){ alert( "Item #" + i + ": " + n ); }); <br>等价于：<br>var tempArr=[0,1,2];<br>for(var i=0;i&lt;tempArr.length;i++){<br>&nbsp;&nbsp;alert("Item #"+i+": "+tempArr[i]);<br>}<br>也可以处理json数据，如<br>$.each( { name: "John", lang: "JS" }, function(i, n){ alert( "Name: " + i + ", Value: " + n ); });<br>结果为：<br>Name:name, Value:John<br>Name:lang, Value:JS<br></font><span style="COLOR: blue">$.extend(target,prop1,propN)：</span><font color=#000000>用一个或多个其他对象来扩展一个对象，返回这个被扩展的对象。这是jquery实现的继承方式。<br>如：<br>$.extend(settings, options);&nbsp;&nbsp;<br>//合并settings和options，并将合并结果返回settings中，相当于options继承setting并将继承结果保存在setting中。<br>var settings = $.extend({}, defaults, options);<br>//合并defaults和options，并将合并结果返回到setting中而不覆盖default内容。<br>可以有多个参数（合并多项并返回）<br></font><span style="COLOR: blue">$.map(array, fn)：</span><font color=#000000>数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中，并返回生成的新数组。<br>如：<br>var tempArr=$.map( [0,1,2], function(i){ return i + 4; });<br>tempArr内容为：[4,5,6]<br>var tempArr=$.map( [0,1,2], function(i){ return i &gt; 0 ? i + 1 : null; });<br>tempArr内容为：[2,3]<br></font><span style="COLOR: blue">$.merge(arr1,arr2):</span><font color=#000000>合并两个数组并删除其中重复的项目。<br>如：$.merge( [0,1,2], [2,3,4] )&nbsp;&nbsp;//返回[0,1,2,3,4]<br></font><span style="COLOR: blue">$.trim(str)：</span><font color=#000000>删除字符串两端的空白字符。 <br>如：$.trim("&nbsp;&nbsp;hello, how are you?&nbsp;&nbsp; ");&nbsp;&nbsp; //返回"hello,how are you? "<br><br></font><span style="COLOR: red">12、解决自定义方法或其他类库与jQuery的冲突</span><br><font color=#000000>很多时候我们自己定义了$(id)方法来获取一个元素，或者其他的一些js类库如prototype也都定义了$方法，如果同时把这些内容放在一起就会引起变量方法定义冲突，Jquery对此专门提供了方法用于解决此问题。<br>使用jquery中的</font><span style="COLOR: blue">jQuery.noConflict();</span></font><font color=#000000>方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用Jquery的时候只要将所有的$换成jQuery即可，如原来引用对象方法$("#msg")改为jQuery("#msg")。<br>如：<br>jQuery.noConflict(); <br>// 开始使用jQuery<br>jQuery("div&nbsp;&nbsp; p").hide();<br>// 使用其他库的 $() <br>$("content").style.display = 'none';<!-- Added by RelatedTopic, plugin for Bo-Blog 2.0.0 --> </font><p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-09-28 12:23 <a href="http://www.cnitblog.com/yemoo/archive/2007/09/28/34140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>10个经典的web2.0配色方案网站</title><link>http://www.cnitblog.com/yemoo/archive/2007/09/27/34075.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Thu, 27 Sep 2007 01:19:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/09/27/34075.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34075.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/09/27/34075.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34075.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34075.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>都是国外的，废话不多说，自己看吧！<br><br><a href="http://www.colourlovers.com/" target=_blank><font color=#0000ff><u>ColourLovers</u></font></a><br><a href="http://www.easyrgb.com/harmonies.php" target=_blank><font color=#0000ff><u>EasyRGB</u></font></a><br><a href="http://colorblender.com/" target=_blank><font color=#0000ff><u>ColorBlender</u></font></a><br><a href="http://www.colorjack.com/" target=_blank><font color=#0000ff><u>ColorJack</u></font></a><br><a href="http://www.steeldolphin.com/color_scheme.html" target=_blank><font color=#0000ff><u>Steel Dolphin Color Scheme Tool</u></font></a><br><a href="http://www.degraeve.com/color-palette/?src=rss" target=_blank><font color=#0000ff><u>DeGraeve.com Color Palette from Image Generator</u></font></a><br><a href="http://www.colorschemer.com/online.html" target=_blank><font color=#0000ff><u>Color Schemer</u></font></a><br><a href="http://kuler.adobe.com/" target=_blank><font color=#0000ff><u>Kuler</u></font></a><br><a href="http://beta.dailycolorscheme.com/" target=_blank><font color=#0000ff><u>Daily Color Scheme</u></font></a><br><a href="http://www.colr.org/" target=_blank><u><font color=#0000ff>Colr.org </font></u></a><p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-09-27 09:19 <a href="http://www.cnitblog.com/yemoo/archive/2007/09/27/34075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【推荐】四个强大的在线Excel(强大的Grid) </title><link>http://www.cnitblog.com/yemoo/archive/2007/09/26/34062.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 26 Sep 2007 10:31:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/09/26/34062.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34062.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/09/26/34062.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34062.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34062.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br><span style="FONT-SIZE: 18px"><strong>EditGrid</strong></span><br>在线excel，很强大的<br><strong>查看地址：</strong><a href="http://www.editgrid.com/untitled" target=_blank><u><font color=#0000ff>http://www.editgrid.com/untitled&nbsp;</font></u></a>&nbsp;&nbsp;&nbsp;&nbsp;<br><br><br><span style="FONT-SIZE: 18px"><strong>TreeGrid</strong></span><br>应该说这个是一个强大的grid，但功能也是一应俱全<br><strong>查看地址：</strong><a href="http://www.treegrid.com/TreeGrid5_0/Html/EJSTreeGrid.html" target=_blank><u><font color=#0000ff>http://www.treegrid.com/TreeGrid5_0/Html/EJSTreeGrid.html</font></u></a>&nbsp;&nbsp; <br><br><span style="COLOR: #ff0000">以下两个需要注册用户才能使用</span><br><br><span style="FONT-SIZE: 18px"><strong>Google SpreadSheet</strong></span><br>一个很有名的产品，相信很多人都知道这个<br><strong>查看地址：</strong><a href="http://spreadsheets.google.com/" target=_blank><u><font color=#0000ff>http://spreadsheets.google.com/</font></u></a><br><br><span style="FONT-SIZE: 18px"><strong>ZoHo sheet</strong></span><br>ZoHo是最近才兴起的一个在线OFFICE站点，word,excel,powerpoint,等一应俱全，值得一看<br><strong>查看地址：</strong><a href="http://sheet.zoho.com/home.do" target=_blank><u><font color=#0000ff>http://sheet.zoho.com/home.do</font></u></a> <p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-09-26 18:31 <a href="http://www.cnitblog.com/yemoo/archive/2007/09/26/34062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web表现层的Client端设计模式探讨[转自BennyBao的blog]</title><link>http://www.cnitblog.com/yemoo/archive/2007/07/17/29943.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 16 Jul 2007 20:02:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/07/17/29943.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/29943.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/07/17/29943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/29943.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/29943.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><div class=postbody>
<p><font face=Verdana><font size=2><em>本文着重讨论的是具有RIA特征的Web应用。例如目前比较流行的的Ajax类Web应用。传统的基于纯HTML的Web应用不在本文讨论之列。</em> <br><br>随着Ajax的升温，开发人员逐渐对Web应用中的各种UI控件和开发框架开始有了越来越浓厚的兴趣。目前所知的这方面的控件集或开发框架可以说是并不鲜见。笔者将这些产品大致分为两个大类：离散控件集型和数据模型驱动型。这两个词大家应该很陌生，因为他们都是鄙人自造的。<br><br><strong>离散控件集型</strong> － 此类产品以提供一系列相对独立的界面控件为主要目的。控件的类型比较全面，例如搭建Web应用常见的各种Grid、Tree、Menu、ToolBar、Window等。不过此类产品一般不会过多的考虑界面中的数据和操作逻辑的封装，至多只会提供相对简单的静态数据绑定*。我认为此类产品的主要出发点是改善Web应用的界面表现能力，同时借助自带的SDK提供一种更加规范的开发模式。<br>目前我所知的大部分产品似乎都属于这一类别。例如: backbase、qooxdoo、NetAdventage、bindows等。<br>Backbase实例中心: </font></font><a href="http://www.backbase.com/demos/explorer" target=_blank><font face=Verdana color=#1d58d1 size=2>http://www.backbase.com/demos/explorer </font></a><br><br><font size=2><font face=Verdana><strong>数据模型驱动型</strong> － 此类产品除了要提供一组比较好用的UI控件集之外，更会提供对界面中数据模型的管理功能。其UI控件以数据敏感控件为主。数据敏感控件可以通过于数据模型的绑定来实现对表现层中数据的展示和控制。这种数据绑定可成为动态数据绑定*。可以说这一类产品的主要出发点除改善Web应用的界面表现能力外，也非常注重提供一种快速开发的模式。<br>好的数据模型驱动型的开发框架应该首先包含离散控件集中的各种功能，它事实上是一种相对于单纯的UI控件集而言更高层次的抽象。<br><img height=173 alt=o_binding.png src="http://www.blogjava.net/images/blogjava_net/bennybao/14638/o_binding.png" width=320 border=0><br>这种模式其实在以前CS下非常常见，例如VB、Delphi等RAD开发工具提交数据库应用开发模式都属于这种类型。不过到了BS下人们似乎都忘记这种开发模式。可能是因为不够见多识广，目前笔者所知的此类产品只有dorado。<br>dorado的示例中心：</font> <font face=Verdana><a href="http://sample.bstek.com/" target=_blank><font color=#1d58d1>http://sample.bstek.com</font></a> </font></font></p>
<p><font face=Verdana size=2>对于上面提到的两种数据绑定方式的解释如下：<br><br><strong>静态数据绑定</strong> &#8211; 是指在控件可以根据指派给他的数据源(往往是XML数据源或简单的数组)自动的提取并展示其中的数据。这种提取过程是主动完成的，当提取过程结束后控件无法继续感知数据源中数据的变化。这事实上是从控件到数据源的拉模式(Pull Mode)。<br><br><strong>动态数据绑定</strong> &#8211; 是指将控件以观察者的角色注册到数据源(往往是经过封装的私有对象)中。数据源成为被观察者。当数据源中的数据或状态发生改变时会主动通知所有观察者（即绑定的控件），然后再由控件自动提取数据完成展现的更新。这样一旦绑定建立以后控件就可以实时的体现数据源中的最新变化。如果用户利用这些控件对数据或状态做了改变，那么这种改变自然也会通过数据源再实时的通知给所有其它相关的控件。这事实上是从数据源到控件的推模式(Push Mode)。<br>&nbsp;<br>回到关于离散控件集型和数据模型驱动型的讨论。这两种开发框架都有这自己的适用面。笔者认为离散控件集型的开发框架更加适合与一些像论坛这样更加注重展现的应用。而对于那些具有明显数据库应用特性的的Web应用(例如MIS类应用)，则数据模型驱动型的开发框架更能发挥它的优势。<br>得出以上结论的原因是我认为数据模型驱动型的开发框架能够使开发人员将更多的精力投入到界面所需要实现的更能当中，至少在制作页面的前期阶段不必太多的关注界面的表现形式。同时如果能够将更多的界面操作逻辑封装到数据模型对象中，就可以保证在后期当最终用户提出界面的修改要求时，开发人员可以用更小的代价来完成对界面的重构。<br><br>让我们来具体分析两个场景:<br><br><strong>场景1</strong>：一个用惯了CS应用的用户要求开发一个界面来维护公司目前拥有的所有书籍。为了方便的完成对所有书籍的CRUD操作，用户希望以一个Grid控件来完成所有这些操作，同时用户希望能够在界面批量的完成一系列C、U、D操作之后一次性的对数据进行保存。每本书籍都有一个由系统自动分配的编码作为主键，因此用户不需要看到书籍的编码。<br>分析：如果我们现在只有一个离散的Grid控件。要完成上述功能我们还需要做以下一些工作:<br><br></font></p>
<li><font face=Verdana size=2>由于编码不在Grid中显示，因此找到一个办法能够管理每本书籍的编码。 </font>
<li><font face=Verdana size=2>由于客户端需要缓存用户的一系列C、U、D操作然后作批量的提交处理，因此必须做一些工作以便记录下哪些书被修改了、哪些是新增的、哪些被删除了。 </font>
<li><font face=Verdana size=2>在提交时将所有的数据修改信息抽取出来组装成可用于提交的格式。<br><br>可见如果使用一个离散的Grid控件来制作这个界面，我们还必须要做不少工作。如果我们能够选择一个数据模型驱动型的开发框架，上面提到的很多功能框架中往往已经具备。开发人员要做的往往只是声明好一个数据模型然后把它跟Grid关联起来。如果您以前使用过VB或Delphi这一类开发功能，应该不难想像这个过程。<br><br><strong>场景2</strong>：想像一个用户信息的录入界面，如下图。使用者需要输入用户的身份证，由于什么证的号码中包含了很多信息，系统完全有可能从其中解析出出生日期和性别这样的信息。因此为了方便录入，我们可以让表单中的出生日期和性别这两个栏位支持自动填入缺省值的功能，只要用户录入了身份证号码，就可以马上自动填充上述两个栏位。</font>
<p><font face=Verdana size=2><img height=182 alt=o_user_form1.png src="http://www.blogjava.net/images/blogjava_net/bennybao/14638/o_user_form1.png" width=284 border=0> <br>&nbsp;<br>在基于离散控件的编程方式中，我们需要知道身份证、出生日期、性别这三个编辑框的id，并针对他们进行编程。其代码形式可能如下:<br><br></font></p>
<p><font face=Verdana size=2></font></p>
<p><font face=Verdana size=2></font></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font face=Verdana><font size=2><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">var&nbsp;id&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;inputId.getValue();&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;获得身份证号码</span> </font></font><span style="COLOR: #008000"><br><font face=Verdana size=2><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </font></span><font face=Verdana><font size=2><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;对身份证进行解析</span> </font></font><span style="COLOR: #008000"><br><font face=Verdana size=2><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </font></span><font face=Verdana><font size=2><span style="COLOR: #000000">inputBrithday.setValue(brithday);&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;为出生日期设置缺省值</span> </font></font><span style="COLOR: #008000"><br><font face=Verdana size=2><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </font></span><font face=Verdana><font size=2><span style="COLOR: #000000">radioGroupSex.setValue(sex);&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;为性别设置缺省值</span> </font></font></div>
<p><font face=Verdana size=2></font></p>
<p><font face=Verdana size=2>在基于数据模型驱动型框架的编程方式中，我们并不需要关注界面上摆放了什么控件，只需要知道关注如何操作数据模型对象。其代码形式可能如下:</font> </p>
<p><font face=Verdana size=2></font></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font face=Verdana size=2><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">var&nbsp;id&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;dmUser.getValue(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">id</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;从数据模型(dmUser)中提取身份证号码</span> </font><span style="COLOR: #008000"><br><font face=Verdana size=2><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </font></span><font face=Verdana><font size=2><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/dot.gif">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;对身份证进行解析</span> </font></font><span style="COLOR: #008000"><br><font face=Verdana size=2><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </font></span><font face=Verdana><font size=2><span style="COLOR: #000000">dmUser.setValue(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">birthday</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">,&nbsp;brithday);&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;为出生日期设置缺省值</span> </font></font><span style="COLOR: #008000"><br><font face=Verdana size=2><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </font></span><font face=Verdana><font size=2><span style="COLOR: #000000">dmUser.setValue(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">sex</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">,&nbsp;sex);&nbsp;</span> <span style="COLOR: #008000">//</span> </font></font><font face=Verdana><font size=2><span style="COLOR: #008000">&nbsp;为性别设置缺省值<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> </font></font></div>
<p><font face=Verdana size=2>可见在这种开发模式中我们的代码几乎完全针对数据模型展开，当我们为dmUser中的brithday和sex赋值后，相应的数据敏感控件会立刻自动显示出这些的数据。这样的编程模式可以让代码有高度的一致性，当我们制作复杂的用户界面时，可以不需要记住诸多的控件id。<br>进一步假设。如果用户有一天觉得这样的界面并不方便对多笔数据进行方便的维护，而要求对界面进行如下调整。在删除原先的表单，利用一个Grid控件来对用户信息进行维护。<br><img height=329 alt=o_user_form2.png src="http://www.blogjava.net/images/blogjava_net/bennybao/14638/o_user_form2.png" width=284 border=0><br>如果我们的编程方式是基于离散控件的，那么我们不可避免的要对先前编写那段代码做一些调整了。我需要将那段代码移植到表格当中。<br>但是如果我们的编程方式是基于数据模型驱动型框架的，那么我们要做的只是将界面上的表单删掉，然后在放置一个与现有数据模型绑定的Grid控件。至于那段代码，它完全不需要做任何变动。<br><br>综上可见，在MIS类Web应用的表现层开发方面。数据模型驱动型的开发框架可以为开发人员带来更多的实惠。不知道随着时间的推移这一类的开发框架会不会丰富起来？<br></font></p>
<p><font face=Verdana size=2></font></p>
</li>
</div>
 <script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/29943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-07-17 04:02 <a href="http://www.cnitblog.com/yemoo/archive/2007/07/17/29943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Ajax的应用程序架构汇总（转Yesky）</title><link>http://www.cnitblog.com/yemoo/archive/2007/07/06/29543.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Fri, 06 Jul 2007 00:28:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/07/06/29543.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/29543.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/07/06/29543.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/29543.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/29543.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script>选一个自己合适的学习<br><br>浏览器端框架被划分成两大类：<br><br>　&#183;应用程序框架：提供浏览器的功能，但是常以包括窗口小部件抽象和另外的部件而出名，其功能主要围绕桌面GUI框架。<br>　&#183;基本结构框架：提供基本的管道和可移植的浏览器抽象，让开发者去创建内容。典型的功能：<br>　　　* 针对XMLHttpRequest的包装器以封装浏览器-服务器的交互。(所有的框架都提供这一功能)。<br>　　　* XML操作和查询。<br>　　　* 根据来自XMLHttpRequest的应答执行DOM操作。<br>　　　* 在一些情况中，与另外的浏览器端技术如Flash(和潜在的Java applets)集成在一起。<br><br>而服务器端框架通常以下面两种方式工作(尽管它们在这里根据语言的不同进行了分类)：<br>　&#183;HTML/JS生成：服务器提供完整的HTML/Javascript代码生成和浏览器-服务器协调，结果是只有浏览器端编码可以被定制。<br>　&#183;远程调用：Javascript调用直接被路由到服务器端功能(例如Java方法)并返回到Javascript回叫处理器；或者Javascript调用服务器以提取信息，例如会话细节，数据库查询等。<br>　&#183;纯Javascript：应用程序框架<br>　　Bindows(自从2003年)<br>　　网址是：<a href="http://www.bindows.net/" target=_blank><u><font color=#0000ff>http://www.bindows.net</font></u></a>，Bindows是一个软件开发包(SDK)，它通过强力联合DHTML，JavaScript，CSS和XML等技术，能生成高度交互的互联网应用程序-成为现代的桌面应用程序的强有力对手。Bindows应用程序不要求下载和也不需要在用户端安装-仅要求有一个浏览器(也不需要Java，Flash或者ActiveX)。Bindows有可能领导面向对象开发的AJAX应用程序的平台。<br>　　&#183;它是商业化的，使用来自于MB的技术(总部位于GA USA，主要开发中心在瑞典，成立于2002年)。<br>　　Bindows框架提供给你：<br>　　&#183;基于类的面向对象的API<br>　　&#183;一套完整的窗口系统，提供宽范围的窗口小部件支持，包括菜单、表单、格子、滑动条、量程，甚至更多<br>　　&#183;用于开发zero-footprint SOA客户端应用程序的领先的工具箱<br>　　&#183;本机的XML，SOAP和XML-RPC支持<br>　　&#183;单用户到企业级的支持<br>　　&#183;内建的对AJAX的支持<br>　　Bindows开发环境：<br>　　&#183;支持企业级规模的工程开发<br>　　&#183;跨浏览器，跨平台支持<br>　　&#183;服务器独立结构<br>　　&#183;与新的和现有资源的互操作性<br>　　&#183;一致性开发方法学<br><br>　　BackBase(自从2003年)<br>　　网址是：<a href="http://www.backbase.com/" target=_blank><u><font color=#0000ff>http://www.backbase.com</font></u></a>，是一个全面的浏览器端框架，支持丰富的浏览器功能以及与.NET和Java的集成。<br>　　&#183;商业化，来自于Backbase B.V(总部在Amsterdam，成立于2003年)。<br><br>　　DOJO(开发中;自从2004年9月)<br>　　网址是：<a href="http://dojotoolkit.org/" target=_blank><u><font color=#0000ff>http://dojotoolkit.org/</font></u></a>，提供全面窗口小组件和浏览器-服务器消息支持。<br>　　&#183;为创建定制的Javascript窗口小组件提供框架支持。 <br>　　&#183;预置的窗口小组件库。<br>　　&#183;浏览器-服务器消息支持-XMLHttpRequest和另外的机制。<br>　　&#183;支持浏览器中的URL操纵功能。<br>　　&#183;开源许可(学术自由许可2.1(<a href="http://opensource.org/licenses/afl-2.1.php" target=_blank><u><font color=#0000ff>http://opensource.org/licenses/afl-2.1.php</font></u></a>))，由JotSpot(<a href="http://www.jot.com/" target=_blank><u><font color=#0000ff>http://www.jot.com/</font></u></a>)的Alex Russell(<a href="http://alex.dojotoolkit.org/" target=_blank><u><font color=#0000ff>http://alex.dojotoolkit.org/</font></u></a>)所领导。<br><br>　　Open Rico(开发中;自从2005年5月;基于早期的私有框架)<br>　　网址是：<a href="http://openrico.org/demos.page" target=_blank><u><font color=#0000ff>http://openrico.org/demos.page</font></u></a>，是一多用途框架，支持Ajax基础结构和用户交互。<br>　　&#183;一个XMLHttpRequest应答能被路由到一个或者更多回叫操作，DOM对象，或者Javascript对象。<br>　　&#183;容易鼠标拖动支持。<br>　　&#183;Ajax动画，例如缩放和变换。<br>　　&#183;"行为"-实质上是窗口小组件库。<br>　　&#183;使用指南(<a href="http://www.mirimar.net/mailbrowser/" target=_blank><u><font color=#0000ff>http://www.mirimar.net/mailbrowser/</font></u></a>)，由RussMirimar的Yonah所提供<br>　　&#183;开源。源于Sabre航空公司解决方案，由Bill Scott(<a href="http://looksgoodworkswell.blogspot.com/" target=_blank><u><font color=#0000ff>http://looksgoodworkswell.blogspot.com</font></u></a>)，Darren James及另外一些人所支持。<br><br>　　qooxdoo(开发中;自从2005年5月)<br>　　网址是：<a href="http://qooxdoo.sourceforge.net/" target=_blank><u><font color=#0000ff>http://qooxdoo.sourceforge.net/</font></u></a>，是另一个雄心勃勃的框架，提供宽范围的UI支持和正在开发中的基础结构特性。<br>　　&#183;基础结构：<br>　　* DOM和事件/焦点管理的可移植的抽象。<br>　　* 调试支持。<br>　　* 易于时间调度的Timer类。 <br>　　* Getter/Setter支持。<br>　　&#183;UI<br>　　* 窗口小组件框架和预置的窗口小组件库。<br>　　* 布局管理器。<br>　　* 图像缓冲和可移植的PNG透明性。<br>　　&#183;开源(LGPL)。来自多方面的贡献者。<br><br>　　Tibet(开发中;自从2005年6月)<br>　　网址是：<a href="http://www.technicalpursuit.com/" target=_blank><u><font color=#0000ff>http://www.technicalpursuit.com/</font></u></a>，目的是提供高度可移植的和全面的Javascript API，结果是，可能自动生成大量的客户端代码。自称是"企业级Ajax"。<br>　　&#183;远程脚本运行在XMLHttpRequest包装之上-通过协调调用结果支持工作流管理，例如应答可以发生在只有当两个分离的调用返回时。<br>　　&#183;URI支持。<br>　　&#183;所有的HTTP方法-不仅是"GET"和"POST"。<br>　　&#183;低级的协议-File://和WebDav以及HTTP。<br>　　&#183;Web服务调用-SOAP，XML-RPC，等等。<br>　　&#183;预置的针对Google API，Amazon API等等服务的支持。<br>　　&#183;由高级Javascript对象组成一个巨大的库。<br>　　&#183;许多XML操作。<br>　　&#183;IDE和开发工具。<br>　　&#183;开源许可(显然经过OSI认证，但是细节不多)。<br>　　<br>　&#183;纯Javascript：基础结构框架<br><br>　　AjaxCaller(Alpha版本;自从5月2005年)<br>　　网址是：<a href="http://ajaxify.com/run/testAjaxCaller/" target=_blank><u><font color=#0000ff>http://ajaxify.com/run/testAjaxCaller/</font></u></a>，是一基本的线程安全的XMLHttpRequest包装器，主要针对Ajax新手，仍处于原始的alpha开发阶段，目前仅与AjaxPatterns的在线搜索范例一起打包。<br>　　&#183;实现对服务器的调用(GET/POST/PUT/DELETE)，用路由到一个回叫操作的plain-text或者XML完成。<br>　　&#183;使用过的XMLHttpRequest对象的析构。<br>　　&#183;Response缓冲(计划的)。<br>　　&#183;针对Ajax新手-并非强调性能优化，该库主要用于实现易读的基础代码并将提供调试支持。<br>　　&#183;开源许可。由Michael Mahemoff(<a href="http://softwareas.com/" target=_blank><u><font color=#0000ff>http://softwareas.com</font></u></a>)(具有John Wehr和Richard Schwartz的一些思想)维护。<br><br>　　Flash JavaScript集成包<br>　　网址是：<a href="http://www.osflash.org/doku.php?id=flashjs" target=_blank><u><font color=#0000ff>http://www.osflash.org/doku.php?id=flashjs</font></u></a>，允许JavaScript和Flash内容的集成：<br>　　&#183;使JavaScript能够调用ActionScript功能和反过来的实现。<br>　　&#183;所有主要的数据类型能在这两种环境之间传递。<br>　　&#183;开源许可。由多个开源Flash贡献者提供支持。<br><br>　　Google AJAXSLT(发行于2005年6月)<br>　　网址是：<a href="http://goog-ajaxslt.sourceforge.net/" target=_blank><u><font color=#0000ff>http://goog-ajaxslt.sourceforge.net/</font></u></a>，是一个Javascript框架，用来执行XSLT转换以及XPath查询。<br>　　&#183;建立在Google地图工作基础之上。<br>　　&#183;开源许可(BSD)。由一家创新搜索方案公司支持，自称为"Google"。<br><br>　　HTMLHttpRequest(Beta版；始于2005年)<br>　　HtmlHttpRequest(<a href="http://www.twinhelix.com/javascript/htmlhttprequest/" target=_blank><u><font color=#0000ff>http://www.twinhelix.com/javascript/htmlhttprequest/</font></u></a>)，它使用了XMLHttpRequest和Iframes以改进兼容性。<br>　　&#183;测试过并能工作在:IE6/Win，IE5.5/Win，IE5/Win，IE4/Win，Mozilla/Win，Opera7/Win，Safari/Mac，IE5/Mac。<br>　　&#183;未测试，可能能工作在：IE4/Mac，Mozilla/Mac，Opera/Other，Konqueror/Linux。你正在使用这些之一吗？作者正在请求兼容性信息。<br>　　&#183;开源许可(LGPL)。由Twin Helix Designs(<a href="http://www.twinhelix.com/" target=_blank><u><font color=#0000ff>http://www.twinhelix.com/</font></u></a>)的Angus Turnbull维护。<br><br>　　交互式网站框架(自从2005年5月)<br>　　交互式网站框架(<a href="http://sourceforge.net/projects/iwf/" target=_blank><u><font color=#0000ff>http://sourceforge.net/projects/iwf/</font></u></a>，是一个项目，目的是从浏览器端对Ajax基础结构的多方面予以支持。自描述为"使用javascript，css，xml，和html来创造高度交互网站的框架。包括一个定制的针对高度可读的javascript的xml分析器。实质上，是建立基于AJAX的网站的基础，还有另外一些通用脚本"。<br>　　&#183;线程安全的XMLHttpRequest实现。<br>　　&#183;针对XML文档的包装器，以便你能够创建更具可读性的代码：<br>var node = doc.groceries.frozen[0].pizza[0].size;&lt;/pre&gt;<br>　　代替手工的导航：<br>var node = doc.documentElement.firstChild.firstChild.getAttribute("size");&lt;/pre&gt;<br>　　&#183;开源许可。由Weaver(<a href="http://circaware.com/" target=_blank><u><font color=#0000ff>http://circaware.com</font></u></a>|Brock)维护。<br><br>　　LibXMLHttpRequest(发行于2003年6月)<br>　　libXmlRequest(<a href="http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html" target=_blank><u><font color=#0000ff>http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html</font></u></a>)，是XMLHttpRequest的一个瘦包装器。<br>　　&#183;getXML()和postXML()方法。<br>　　&#183;XMLHttpRequest对象池支持。<br>　　&#183;Response缓冲。<br>　　&#183;可用源码(明显)，但是受标准版权的保护，由Stephen W.Coate(<a href="http://www.whitefrost.com/index.jsp" target=_blank><u><font color=#0000ff>http://www.whitefrost.com/index.jsp</font></u></a>)所维护。<br><br>　　RSLite(x)<br>　　网站是：<a href="http://www.ashleyit.com/rs/main.htm" target=_blank><u><font color=#0000ff>http://www.ashleyit.com/rs/main.htm</font></u></a>，是一个针对XMLHttpRequest的瘦包装器。<br>　　&#183;一个简单的组件，作为Brent Ashley的更全面的远程脚本工作(参见Javascript远程脚本-JSRS在多语言服务器端)的一部分发行。<br><br>　　Sack(在开发中，自从2005年5月)<br>　　网站是：<a href="http://twilightuniverse.com/2005/05/sack-of-ajax/" target=_blank><u><font color=#0000ff>http://twilightuniverse.com/2005/05/sack-of-ajax/</font></u></a>，是一个针对XMLHttpRequest的瘦包装器。<br>　　&#183;调用者能指定回叫函数或者回叫DOM对象。借助于回叫DOM，应答文本直接被推入到DOM中<br><br>　　Sarissa(发行于2月，2003年)<br>　　网站是：<a href="http://sarissa.sf.net/" target=_blank><u><font color=#0000ff>http://sarissa.sf.net</font></u></a>，是一种Javascript API，它封装了在浏览器端可以独立调用XML的功能。<br>　　&#183;可移植的XMLHttpRequest创建<br>　　&#183;可移植的XPath查询<br>　　&#183;可移植的DOM操作<br>　　&#183;可移植的XSLT<br>　　&#183;可移植的XML串行化<br>　　&#183;开源(GPL2.0和LGPL2.1)。来自多方面贡献者。<br><br>　　XHConn(发行于自从4月，2005年)<br>　　网站是：<a href="http://xkr.us/code/javascript/XHConn/" target=_blank><u><font color=#0000ff>http://xkr.us/code/javascript/XHConn/</font></u></a>，是一个对XMLHttpRequest的瘦包装器。<br>　　&#183;例如：<br>　　new XHConn().connect("mypage.php"，"POST"，"foo=bar&amp;baz=qux"，fnWhenDone);<br>　　&#183;开源许可。由Brad Fults所维护。<br><br>　&#183;服务器端：多种语言<br><br>　　跨平台异步的接口工具箱(5月2005年)<br>　　CPAINT：<a href="http://cpaint.sourceforge.net/" target=_blank><u><font color=#0000ff>http://cpaint.sourceforge.net/</font></u></a>，是一真正的支持PHP和ASP/Vbscript的Ajax实现和JSRS(JavaScript远程脚本)实现。CPAINT提供给你需求的代码在后台实现AJAX和JSRS，而返回的数据以JavaScript形式在前台操作，格式化和显示。这允许你创建能提供接近实时的反馈给用户的web应用程序。<br>　　&#183;支持PHP&amp;ASP<br>　　&#183;针对所有函数的一致的JavaScript文件<br>　　&#183;支持远程脚本和XML<br>　　&#183;支持本地和远程函数<br>　　&#183;单个或者多个XMLHTTP对象<br>　　&#183;以文本或者JavaScript XML/DOM文档对象方式返回后台数据<br>　　&#183;能支持POST和GET请求<br>　　&#183;后台代理函数来访问远程函数和数据<br>　　&#183;在所有的主要浏览器上测试过<br>　　&#183;在GNU GPL&amp;LGPL保护下发行<br><br>　　SAJAX(可用，但是不是1.0版本;自从3月2005年)<br>　　网站是：<a href="http://www.modernmethod.com/sajax/" target=_blank><u><font color=#0000ff>http://www.modernmethod.com/sajax/</font></u></a>，直接把调用从Javascript发送到你的服务器端语言并再次回返。例如，调用一个javascript方法x_calculateBudget()，将先到达服务器和调用一个Java calculateBudget()方法，然后以javascript方式把值返回到x_calculateBudget_cb()。<br>　　&#183;便利从Javascript代理函数到后台操作的映射。<br>　　&#183;能够代理对众多服务器端平台（ASP/ColdFusion/Io/Lua/Perl/PHP/Python/Ruby）的调用。<br>　　&#183;开源许可。来自多方面贡献者。<br><br>　　Javascipt对象标志(JSON)和JSON-RPC<br>　　JSON(<a href="http://www.crockford.com/JSON/index.html" target=_blank><u><font color=#0000ff>http://www.crockford.com/JSON/index.html</font></u></a>)，是一个"胖的自由的XML选择"，而JSON-RPC(<a href="http://www.json-rpc.org/" target=_blank><u><font color=#0000ff>http://www.json-rpc.org/</font></u></a>)是一种远程过程协议，类似于XML-RPC，强有力支持Javascript客户。<br>　　&#183;实现多服务器端平台(<a href="http://www.json-rpc.org/" target=_blank><u><font color=#0000ff>http://www.json-rpc.org/</font></u></a>impl.xhtml)：Java，Python，Ruby，Perl。<br>　　&#183;针对每种平台有独立的打包和许可，如JSON-RPC-Java(<a href="http://oss.metaparadigm.com/jsonrpc/" target=_blank><u><font color=#0000ff>http://oss.metaparadigm.com/jsonrpc/</font></u></a>)。<br><br>　　Javascript远程脚本(JSRS)(自从2000年)<br>　　网址是：<a href="http://www.ashleyit.com/rs/jsrs/test.htm" target=_blank><u><font color=#0000ff>http://www.ashleyit.com/rs/jsrs/test.htm</font></u></a>，直接把调用从Javascript发送到你的服务器端语言并再次回返。<br>　　&#183;知名的浏览器：IE4+，NS4.x，NS6.x，Mozilla，Opera7和Galeon。<br>　　&#183;服务器端支持：ASP，ColdFusion，PerlCGI，PHP,Python和JSP(servlet)。<br>　　&#183;开源许可。由Brent Ashley(<a href="http://www.ashleyit.com/" target=_blank><u><font color=#0000ff>http://www.ashleyit.com/</font></u></a>)提供支持。<br><br>　&#183;服务器端：Java<br>　　注意：许多现有的框架最近正在添加Java支持(例如struts)，我将在后面指出。<br><br>　　WebORB for Java(自从2005年8月)<br>　　网址：<a href="http://www.themidnightcoders.com/weborb/aboutWeborb.htm" target=_blank><u><font color=#0000ff>http://www.themidnightcoders.com/weborb/aboutWeborb.htm</font></u></a>，是一个平台，支持开发AJAX和基于Flash的胖客户端应用程序，并可以把它们与Java对象和XML Web服务相系起来。在线举例(http：//www.themidnightcoders.com/examples)<br>　　&#183;WebORB包括一个称作丰富的客户系统(<a href="http://www.themidnightcoders.com/rcs/index.htm" target=_blank><u><font color=#0000ff>http://www.themidnightcoders.com/rcs/index.htm</font></u></a>)的客户端库。该丰富的客户系统提供一简单的在线api来绑定到并调用任何Java对象，XML Web服务或者EJB上的方法。<br>　　&#183;支持同步的和异步的方法调用。<br>　　&#183;并不要求在服务器端代码上作任何修改，不需要定制方法属性，特别的签名或者参数类型。★不要求设计时生成代理。<br>　　&#183;同步调用返回来自于该调用(不需要回叫)的数据。异步的调用依赖于一个回叫实现。<br>　　&#183;任何服务器端方法能被同步地或者异步地调用。<br>　　&#183;客户应用程序能向服务器对象请求指定的活动方式。结果，对象能被轻易地创建而不需任何特殊的编程。<br>　　&#183;提供一个特定API来处理数据库查询结果-服务器代码能返回Data集合或者Data表，而客户端以一个特殊RecordSet JavaScript对象来显示这个结果。该对象提供一个方法以检索列名和行数据。<br>　　&#183;支持数据分页技术。客户应用程序能检索页面中的数据。<br>　　&#183;支持所有的服务器端参数类型并返回值-原型，字符串，复合类型，数组，本机.net集合，远程参考。<br>　　&#183;共有两种版本可用：标准版(自由)和专业版(商业许可)<br><br>　　Echo 2(自从3月2005年)<br>　　网址是：<a href="http://www.nextapp.com/products/echo2/" target=_blank><u><font color=#0000ff>http://www.nextapp.com/products/echo2/</font></u></a>，允许你用纯Java代码编写Ajax应用软件(范例(<a href="http://demo.nextapp.com/InteractiveTest/ia" target=_blank><u><font color=#0000ff>http://demo.nextapp.com/InteractiveTest/ia</font></u></a>))。<br>　　 自动地生成HTML和Javascript。<br>　　&#183;协调浏览器和服务器之间的消息。消息形式为XML。<br>　　&#183;如果需要，可以手工编写定制的Javascript部件。<br>　　&#183;开源许可(Mozilla公共许可或者GNU LGPL)。源于Next App,Inc.(<a href="http://www.nextapp.com/" target=_blank><u><font color=#0000ff>http://www.nextapp.com/</font></u></a>)。<br><br>　　Direct Web Remoting (DWR)(2005年)<br>　　网址是：<a href="http://www.getahead.ltd.uk/dwr/" target=_blank><u><font color=#0000ff>http://www.getahead.ltd.uk/dwr/</font></u></a>，是一个框架，用于直接从Javascript代码中调用Java方法。<br>　　&#183;象SAJAX，能把Javascript中的调用传递到Java方法，并返回到Javascript回叫。<br>　　&#183;能与任何web框架（Struts，Tapestry，等等）一起使用。<br>　　&#183;开源许可(Apache(<a href="http://www.apache.org/LICENSE.txt" target=_blank><u><font color=#0000ff>http://www.apache.org/LICENSE.txt</font></u></a>))。由Joe Walker(<a href="http://www.getahead.ltd.uk/sg/space/joe/" target=_blank><u><font color=#0000ff>http://www.getahead.ltd.uk/sg/space/joe/</font></u></a>)所支持。被加入到WebWork(<a href="http://www.opensymphony.com/webwork/" target=_blank><u><font color=#0000ff>http://www.opensymphony.com/webwork/</font></u></a>)版本。<br><br>　　SWATO(2005年)<br>　　网址是：<a href="http://swato.dev.java.net/" target=_blank><u><font color=#0000ff>http://swato.dev.java.net/</font></u></a>，是一套可重用的和良好集成的Java/JavaScript库，它实现了一种更容易的方式来改变你的web应用程序的交互，它是通过AJAX方式实现。<br>　　&#183;服务器端Java库能被容易地配置到所有的Servlet 2.3+匹配的容器中。<br>　　&#183;客户端JavaScript库能工作在支持HttpXMLRequest的各种浏览器中。<br>　　&#183;使用JSON来在服务器端编组你的POJO数据。这样你能存取在任何JavaScript环境(HTML，XUL，SVG)中的远程数据，这种存取可以容易地通过硬编码或者与某种成熟的JavaScript库集成来实现。<br>　　&#183;提供一个简单的接口来使你的JavaScript代码可以与暴露在客户端的远程POJO交互(RPC等)。<br>　　&#183;使用web.xml中的&lt;servlet&gt;和&lt;filter&gt;的容易且灵活的配置，并能(但不是依赖)与Spring集成到一起。<br>　　&#183;提供了几个可帮助你快速开发web应用程序的组件(如自动完成的文本框，在线表单，在线列表，等等)。<br><br>　&#183;服务器端：Lisp<br><br>　　CL-Ajax<br>　　网址：<a href="http://cliki.net/cl-ajax" target=_blank><u><font color=#0000ff>http://cliki.net/cl-ajax</font></u></a>，实现Javascript直接调用服务器端Lisp函数。<br>　　&#183;如下输出函数：<br>　　　　(export-函数 #&#8217;my-函数) <br>　　&#183;可以产生带有参数的Javascript代理。<br>　　&#183;能回叫Javascript函数或者DOM对象。<br>　　&#183;可以被集成进SAJAX。<br>　　&#183;开源(定制，非常灵活，许可)。由[Richard Newman](<a href="http://www.holygoat.co.uk/" target=_blank><u><font color=#0000ff>http://www.holygoat.co.uk/</font></u></a>)所维护。<br><br>　&#183;服务器端：.NET<br><br>　　WebORB for.NET(自从8月2005年)<br>　　网址：<a href="http://www.themidnightcoders.com/weborb/aboutWeborb.htm" target=_blank><u><font color=#0000ff>http://www.themidnightcoders.com/weborb/aboutWeborb.htm</font></u></a>，是一个平台，用于开发AJAX和基于Flash的胖客户端应用程序，并能把它们连接到.NET对象和XML Web服务。(在线举例(<a href="http://www.themidnightcoders.com/examples" target=_blank><u><font color=#0000ff>http://www.themidnightcoders.com/examples</font></u></a>))<br>　　&#183;WebORB包括一个客户端库，名叫Rich Client System(<a href="http://www.themidnightcoders.com/rcs/index.htm" target=_blank><u><font color=#0000ff>http://www.themidnightcoders.com/rcs/index.htm</font></u></a>)。Rich Client System提供一简单的在线api以绑定到和调用任何.NET对象或者XML Web服务上的任何方法。<br>　　&#183;支持同步和异步的方法调用<br>　　&#183;并不要求在服务器端代码上作任何修改，不需要定制方法属性，特别的签名或者参数类型。**不要求设计时代理生成。<br>　　&#183;同步调用返回来自于该调用的数据(不需要回叫)。异步的调用依赖于一个回叫实现。<br>　　&#183;任何服务器端方法能被同步地或者异步地调用。<br>　　&#183;客户应用程序能向服务器对象请求指定的活动方式。结果，对象能被轻易地创建而不需任何特殊的编程。<br>　　&#183;提供一个特定API来处理数据库查询结果-服务器代码能返回DataSet或者DataTable，而客户端以一个特殊RecordSet JavaScript对象来显示这个结果。该对象提供一个方法以检索列名和行数据<br>　　&#183;支持数据页面技术。客户端应用程序能检索页面中的数据。<br>　　&#183;支持所有的服务器端参数类型并返回值-原型，字符串，复合类型，数组，本机.net集合，远程参考<br>　　&#183;共有两种版本可用的：标准版(自由)和专业版(商业许可)<br><br>　　Ajax.NET(自从3月2005年)<br>　　网址是：<a href="http://ajax.schwarz-interactive.de/" target=_blank><u><font color=#0000ff>http://ajax.schwarz-interactive.de/</font></u></a>，是一个库，实现从Javascript到服务器端.NET的存取。<br>　　&#183;象SAJAX，能把Javascript中的调用传递到.NET方法，并返回到Javascript回叫。<br>　　&#183;能存取来自于JavaScript的会话数据。<br>　　&#183;缓存结果<br>　　&#183;自由使用，可用的源码，未指定使用许可。由Michael Schwarz(<a href="http://weblogs.asp.net/mschwarz/" target=_blank><u><font color=#0000ff>http://weblogs.asp.net/mschwarz/</font></u></a>)所维护。<br>　　&#183;不允许改变源代码，用属性标记方法<br>　　&#183;完整的类支持以返回客户端JavaScript值<br>　　&#183;使用HtmlControls来进行输入和返回值<br>　　&#183;可以返回数据表，数据集，数据视图，数组和集合<br><br>　&#183;服务器端：PHP<br><br>　　AjaxAC(自从2005年4月)<br>　　网址是：<a href="http://ajax.zervaas.com.au/" target=_blank><u><font color=#0000ff>http://ajax.zervaas.com.au/</font></u></a>，用单个的PHP类封装了完整的应用程序。<br>　　&#183;所有的应用程序代码是自包含在单个类中(附加另外一些JavaScript库)<br>　　&#183;干净利索地调用PHP文件/HTML页面。只需创建应用程序类，然后参照应用程序JavaScript和依附任何需要的HTML元素到该应用程序。 <br>　　&#183;容易地处理JavaScript事件的内嵌功能<br>　　&#183;创建子需要并处理它们的内嵌功能<br>　　&#183;允许定制的配置值，因此某些单元能在运行时间设置<br>　　&#183;无凌乱的JavaScript代码夹杂在调用HTML的代码中-所有的事件是被动态依附的<br>　　&#183;由于以上两个原因容易和模板引擎集成到一起<br>　　&#183;容易钩到（hook in to）已有的PHP类或者MySQL数据库以返回来自于子需求的数据<br>　　&#183;能够容易地进一步生成JavaScript对象的可扩展的窗口小组件结构(但是还需要做一些工作)<br>　　&#183;开源许可(Apache2.0)。由Zervaas Enterprises(<a href="http://ajax.zervaas.com.au/" target=_blank><u><font color=#0000ff>http://ajax.zervaas.com.au/</font></u></a>)支持<br><br>　　JPSpan<br>　　网址是：<a href="http://jpspan.sourceforge.net/wiki/doku.php" target=_blank><u><font color=#0000ff>http://jpspan.sourceforge.net/wiki/doku.php</font></u></a>，直接把Javascript调用传递到PHP函数。<br>　　&#183;进行了严肃的单元测试。<br>　　&#183;开源许可(PHP)。<br><br>　　XAJAX<br>　　网址是：<a href="http://xajax.sf.net/" target=_blank><u><font color=#0000ff>http://xajax.sf.net</font></u></a>，直接把Javascript调用传递到PHP函数。<br>　　&#183;使用Javascript代理来调用PHP脚本。<br>　　&#183;开源。由J.Max Wilson所创。<br><br>　　服务器端：Ruby<br>　　Ruby On Rails(<a href="http://www.rubyonrails.org/" target=_blank><u><font color=#0000ff>http://www.rubyonrails.org/</font></u></a>)是一个通常的强力支持Ajax的web框架：<br>　　&#183;当Ajax出现的时候Rails还处于其发展的早期，因此Ajax可能逐渐成为Rails框架的核心。<br>　　&#183;生成浏览器中大多数/全部的窗口小组件和动画的Javascript脚本。<br>　　&#183;支持服务器端调用。<br>　　&#183;调度支持。　<br>　　&#183;开源许可。 <br>
 <script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/29543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-07-06 08:28 <a href="http://www.cnitblog.com/yemoo/archive/2007/07/06/29543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>体验时代的十个基本法则【转自toboshu】</title><link>http://www.cnitblog.com/yemoo/archive/2007/06/19/28746.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Tue, 19 Jun 2007 07:07:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/06/19/28746.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/28746.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/06/19/28746.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/28746.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/28746.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><p>在这个时代里10个基本法则是：
<p>1、更多的功能并不好
<p>&nbsp;&nbsp;&nbsp;&nbsp; More features isn&#8217;t better, it&#8217;s worse；
<p>&nbsp;2、增加功能不会让事情更容易
<p>&nbsp;&nbsp;&nbsp; &nbsp;You can&#8217;t make things easier by adding to them；
<p>3、让用户迷惑是毁掉业务的终级手段
<p>&nbsp;&nbsp;&nbsp; &nbsp;Confusion is the ultimate deal-breaker；
<p>4、风格很关键
<p>&nbsp;&nbsp;&nbsp; &nbsp;Style matters；
<p>5、只有在一项功能可以提升用户体验时才加上它
<p>&nbsp;&nbsp;&nbsp; &nbsp;Only features that provide a good user experience will be used；
<p>6、任何需要学习的功能都只会吸引一小部分用户
<p>&nbsp;&nbsp;&nbsp; &nbsp;Any feature that requires learning will only be adopted by a small fraction of users；
<p>7、无用的功能不止是无用，它会破坏易用性
<p>&nbsp;&nbsp;&nbsp; &nbsp;Unused features are not only useless, they can slow you down and diminish ease of use；
<p>8、用户不会关心技术，他们只想知道产品能做什么
<p>&nbsp;&nbsp;&nbsp;&nbsp; Users do not want to think about technology: what really counts is what it does for them；
<p>9、忘掉关键功能，关注最重要的用户体验
<p>&nbsp;&nbsp;&nbsp; &nbsp;Forget about the killer feature. Welcome to the age of the killer user-experience；
<p>10、简洁很难，因此少就是多
<p>&nbsp;&nbsp;&nbsp;&nbsp; Less is difficult, that&#8217;s why less is more。 </p>
 <script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/28746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-06-19 15:07 <a href="http://www.cnitblog.com/yemoo/archive/2007/06/19/28746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX中文问题解决方案【转自网络】</title><link>http://www.cnitblog.com/yemoo/archive/2007/05/10/26822.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Thu, 10 May 2007 07:55:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/05/10/26822.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/26822.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/05/10/26822.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/26822.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/26822.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><p>AJAX中文问题分为两大类：<br>&nbsp;&nbsp; 1）发送路径中的参数有中文，在服务器段接收参数值是乱码<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; 例如：<br>&nbsp;&nbsp; var url="a.jsp?name=小李"；<br>&nbsp;&nbsp; xmlHTTP.open ("post",url,true); <br>&nbsp;&nbsp; 解决办法：<br>&nbsp;&nbsp; 利用javascript的提供的escape()或encodeURI()方法<br>&nbsp;&nbsp; 例如：<br>&nbsp;&nbsp; 客户端：<br>&nbsp;&nbsp; var url="a.jsp?name=小李"；<br>&nbsp;&nbsp; url=encodeURI(url); <br>&nbsp;&nbsp; url=encodeURI(url); //两次，很关键[具体为什么，我也不清楚]<br>&nbsp;&nbsp; /********************************************/<br>&nbsp;&nbsp; 也有人写成var url="a.jsp?name=escape("小李")"；<br>&nbsp;&nbsp; 功能和encodeURI方法类似。<br>&nbsp;&nbsp; /********************************************/<br>&nbsp;&nbsp; xmlHTTP.setrequestheader("cache-control","no-cache");&nbsp; <br>&nbsp;&nbsp; xmlHTTP.setrequestheader("Content-Type","application/x-www-form-urlencoded"); <br>&nbsp;&nbsp; xmlHTTP.setrequestheader("contentType","text/html;charset=uft-8")//指定发送数据的编码格式<br>&nbsp;&nbsp; xmlHTTP.open ("post",url,true); <br>&nbsp;&nbsp; 服务器端：<br>&nbsp;&nbsp; String name = request.getParameter("name"); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = java.net.URLDecoder.decode("name", "UTF-8"); <br>&nbsp;&nbsp; 2）返回来的responseText或responseXML的值中含有中文是乱码<br>&nbsp;&nbsp; 原因：AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的，如果服务器段发送的数据不是UTF-8的格式，那么接收responseText或responseXML的值有可能为乱码。<br>&nbsp;&nbsp; 解决办法：在服务器指定发送数据的格式：<br>&nbsp;&nbsp; 在jsp文件中：<br>&nbsp;&nbsp; response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件<br>&nbsp;&nbsp; 或是<br>&nbsp;&nbsp; response.setContentType("text/xml;charset=UTF-8");//返回的xml文件</p>
&nbsp;&nbsp; 总结:1)ajax提交数据的格式默认为utf-8,利用javascript的提供的escape()或encodeURI()方法.在服务器端接收的时候要使用java.net.URLDecoder.decode("","UTF-8")方法进行解码.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)xtmlhttp 返回的数据默认的字符编码是utf-8,所以服务器要向客户端发送数据的时候,也要采用utf-8编码<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果上述方法仍然解决不了乱码问题,那你尝试一下把jsp,htm,java文件用UTF-8编码格式保存.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 总之:前后台数据交互都采用utf-8编码就行了.
 <script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/26822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-05-10 15:55 <a href="http://www.cnitblog.com/yemoo/archive/2007/05/10/26822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX框架汇总【转自thinkpadleo的专栏】</title><link>http://www.cnitblog.com/yemoo/archive/2007/01/24/22284.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 24 Jan 2007 14:06:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/01/24/22284.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/22284.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/01/24/22284.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/22284.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/22284.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script>
  <dl class="ReadArticle">
    <dd class="ArticleContent">
      <div class="HideDiv" style="OVERFLOW: hidden; WIDTH: 100%">
        <span id="LblContent">
          <p>基于浏览器的应用框架一般分为两种： </p>
          <ul>
            <li>Aplication frameworks:提供了浏览器功能，但其最著名的还是在于通过窗口生成组件建立桌面GUI。 
</li>
            <li>Infrastructural frameworks:提供基本的框架功能和轻便式浏览器端操作，让开发者去创建具体应用，主要功能包括： 
<ul><li>基于XMLHttpRequest组件的浏览器交互功能 
</li><li>XML解析和操作功能 
</li><li>根据XMLHttpRequest的返回信息进行相应的DOM操作 
</li><li>一些特殊情况下，和其他的浏览器端技术如Flash（或Java Applets）等集合到一起应用 </li></ul></li>
          </ul>
          <p>基于服务器端的应用框架通常以下面两种方式工作(尽管它们根据不同的语言进行了分类) </p>
          <ul>
            <li>HTML/JS Generation(HTML/JS生成)：通过服务器端生成HTML和JS代码在传递给浏览器端进行直接运行 
</li>
            <li>远程交互：JavaScript调用服务器端函数(例如调用Java函数)并返回给JavaScript的回调句柄，或者请求服务器端数据信息，例如Session信息，数据库查询等。 </li>
          </ul>
          <h1>目录</h1>
        </span>
      </div>
    </dd>
    <dt>
    </dt>
    <div style="MARGIN: 5px">
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#1">
        <font color="#ff0000">1 Pure Javascript: Application Frameworks</font>
      </a>
    </div>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#1.1">
        <font color="#ff0000">1.1 Bindows</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#1.2">
        <font color="#ff0000">1.2 BackBase</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#1.3">
        <font color="#ff0000">1.3 DOJO</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#1.4">
        <font color="#ff0000">1.4 Open Rico</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#1.5">
        <font color="#ff0000">1.5 qooxdoo</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#1.6">
        <font color="#ff0000">1.6 Tibet</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#1.7">
        <font color="#ff0000">1.7 AJFORM</font>
      </a>
    </dd>
    <dt>
    </dt>
    <div style="MARGIN: 5px">
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2">
        <font color="#ff0000">2 Pure Javascript: Infrastructural Frameworks</font>
      </a>
    </div>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.1">
        <font color="#ff0000">2.1 AjaxCaller</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.2">
        <font color="#ff0000">2.2 Flash JavaScript Integration Kit </font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.3">
        <font color="#ff0000">2.3 Google AJAXSLT</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.4">
        <font color="#ff0000">2.4 HTMLHttpRequest</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.5">
        <font color="#ff0000">2.5 Interactive Website Framework </font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.6">
        <font color="#ff0000">2.6 LibXMLHttpRequest</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.7">
        <font color="#ff0000">2.7 MAJAX</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.8">
        <font color="#ff0000">2.8 RSLite</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.9">
        <font color="#ff0000">2.9 Sack</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.10">
        <font color="#ff0000">2.10 Sarissa</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#2.11">
        <font color="#ff0000">2.11 XHConn</font>
      </a>
    </dd>
    <dt>
    </dt>
    <div style="MARGIN: 5px">
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#3">
        <font color="#ff0000">3 Server-Side: Multi-Language</font>
      </a>
    </div>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#3.1">
        <font color="#ff0000">3.1 Cross-Platform Asynchronous INterface Toolkit</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#3.2">
        <font color="#ff0000">3.2 SAJAX</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#3.3">
        <font color="#ff0000">3.3 Javascipt Object Notation (JSON) and JSON-RPC</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#3.4">
        <font color="#ff0000">3.4 Javascript Remote Scripting (JSRS)</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#3.5">
        <font color="#ff0000">3.5 Bitkraft for ASP.NET</font>
      </a>
    </dd>
    <dt>
    </dt>
    <div style="MARGIN: 5px">
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#4">
        <font color="#ff0000">4 Server-Side: Java</font>
      </a>
    </div>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#4.1">
        <font color="#ff0000">4.1 WebORB for Java</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#4.2">
        <font color="#ff0000">4.2 Echo 2</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#4.3">
        <font color="#ff0000">4.3 Direct Web Remoting (DWR)</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#4.4">
        <font color="#ff0000">4.4 SWATO</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#4.5">
        <font color="#ff0000">4.5 AJAX JSP Tag Library</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#4.6">
        <font color="#ff0000">4.6 AJAX Java Server Faces Framework</font>
      </a>
    </dd>
    <dt>
    </dt>
    <div style="MARGIN: 5px">
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#5">
        <font color="#ff0000">5 Server-Side: Lisp</font>
      </a>
    </div>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#5.1">
        <font color="#ff0000">5.1 CL-Ajax</font>
      </a>
    </dd>
    <dt>
    </dt>
    <div style="MARGIN: 5px">
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#6">
        <font color="#ff0000">6 Server-Side: .NET</font>
      </a>
    </div>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#6.1">
        <font color="#ff0000">6.1 WebORB for .NET</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#6.2">
        <font color="#ff0000">6.2 Ajax.NET</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#6.3">
        <font color="#ff0000">6.3 ComfortASP.NET</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#6.4">
        <font color="#ff0000">6.4 AjaxAspects</font>
      </a>
    </dd>
    <dt>
    </dt>
    <div style="MARGIN: 5px">
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#7">
        <font color="#ff0000">7 Server-Side: PHP</font>
      </a>
    </div>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#7.1">
        <font color="#ff0000">7.1 AjaxAC</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#7.2">
        <font color="#ff0000">7.2 JPSpan</font>
      </a>
    </dd>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#7.3">
        <font color="#ff0000">7.3 XAJAX</font>
      </a>
    </dd>
    <dt>
    </dt>
    <div style="MARGIN: 5px">
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#8">
        <font color="#ff0000">8 Server-Side: Ruby</font>
      </a>
    </div>
    <dd>
      <a href="http://blog.csdn.net/baggio785/archive/2006/05/21/747753.aspx#8.1">
        <font color="#ff0000">8.1 Ruby On Rails</font>
      </a>
      <p>?</p>
      <h1>1. <a name="1"></a>Pure Javascript: Application Frameworks</h1>
      <h3>1.1 <a name="1.1"></a>Bindows (成立于2003年)</h3>
      <p>
        <a href="http://www.bindows.net/" target="_blank">
          <font color="#ff0000">Bindows</font>
        </a>是一个通过DHTML、JavaScript、CSS和HTML等技术强劲联合起来的一套完整的Windows桌面式的WEB应用程序解决方案。Bindows无需下载安装客户端支撑组件（如Java、ActiveX或Flash），仅需一个浏览器。纯OO的理念体现在Bindows任何地方，Bindows或许是笔者见过的最完整最强大的AJAX应用程序平台。 <br />Bindows是商业程序的，使用了来自于MB的技术(总部位于GA USA，主要开发中心在瑞典，成立于2002年)。</p>
      <p>Bindows框架提供的功能和特性有： </p>
      <ul>
        <li>基于面相对象技术的类和API 
</li>
        <li>一套完整的Windows桌面系统，支持各种特性窗口模式，包括菜单、表单、表格、滑动条、测量仪器窗口和其他一些Windows窗口特性支持。 
</li>
        <li>是开发zero-footprint(零空间占用)SOA客户端应用程序首选工具包 
</li>
        <li>本机的XML，SOAP和XML-RPC支持 
</li>
        <li>单用户到企业级开发的支持 
</li>
        <li>内建的完美的AJAX支持 </li>
      </ul>
      <p>Bindows开发环境： </p>
      <ul>
        <li>支持企业级规模的项目开发 
</li>
        <li>跨浏览器、跨OS平台的支持 
</li>
        <li>不受服务器结构限制 
</li>
        <li>良好的与新的、现有的资源互操作性 
</li>
        <li>统一的开发接口 </li>
      </ul>
      <p>?</p>
      <h3>1.2 <a name="1.2"></a>BackBase (成立于2003年)</h3>
      <p>
        <a href="http://www.backbase.com/" target="_blank">
          <font color="#ff0000">BackBase</font>
        </a>是一个完整的浏览器端框架，提供了丰富的浏览器操作功能，以及对.NET和JAVA平台的集成。 <br />商业化产品，来自于Backbase B.V(总部在Amsterdam，成立于2003年)。 </p>
      <p>?</p>
      <h3>1.3 <a name="1.3"></a>DOJO (开发中,成立于2004年9月) </h3>
      <p>DOJO提供完整的轻量级窗口组件和浏览器-服务器消息映射支持</p>
      <ul>
        <li>提供创建自定义Javascript窗口组件的框架支持 
</li>
        <li>预制的丰富的窗口类型库 
</li>
        <li>B/S消息映射支持——XMLHttpRequest和其他机制 
</li>
        <li>支持浏览器中的URL操纵功能 
</li>
        <li>开源许可(<a href="http://opensource.org/licenses/afl-2.1.php" target="_blank"><font color="#ff0000">Academic Free License 2.1</font></a>)，由<a href="http://www.jot.com/" target="_blank"><font color="#ff0000">JotSpot</font></a>的<a href="http://alex.dojotoolkit.org/" target="_blank"><font color="#ff0000">Alex Russell</font></a>所领导。 </li>
      </ul>
      <h3>1.4 <a name="1.4"></a>Open Rico (开发中;成立于2005年5月;基于早期的一个proprietary 框架) </h3>
      <p>
        <a href="http://openrico.org/demos.page" target="_blank">
          <font color="#ff0000">Open Rico</font>
        </a>是一个支持Ajax架构和用户交互的多用途框架。 </p>
      <ul>
        <li>一个XMLHttpRequest response能被一个或多个的DOM对象，或者Javascript对象调用。 
</li>
        <li>支持拖拽操作 
</li>
        <li>支持基于AJAX的动画模式，如缩放和变换等 
</li>
        <li>基于Behaviors的操作库 
</li>
        <li>
          <a href="http://www.mirimar.net/mailbrowser/" target="_blank">
            <font color="#ff0000">使用指南</font>
          </a>，由RussMirimar的Yonah提供 
</li>
        <li>开源。源于Sabre航空公司解决方案，由<a href="http://looksgoodworkswell.blogspot.com/" target="_blank"><font color="#ff0000">Bill Scott</font></a>，Darren James及另外一些人维护。 </li>
      </ul>
      <p>?</p>
      <h3>1.5 <a name="1.5"></a>qooxdoo (开发中; 成立于2005年5月) </h3>
      <p>
        <a href="http://qooxdoo.sourceforge.net/" target="_blank">
          <font color="#ff0000">qooxdoo</font>
        </a>，是另一个发展迅猛的应用框架，提供广泛的UI支持，正在开发基础架构等特性。 </p>
      <ul>
        <li>基础结构特性： 
<ul><li>能轻易的捕获和操纵DOM事件 
</li><li>支持调试 
</li><li>支持一个时间操作的Timer类 
</li><li>Getter/Setter支持 </li></ul></li>
        <li>UI: 
<ul><li>窗口组件库和框架 
</li><li>界面布局管理 
</li><li>图像缓存和透明PNG图片处理 </li></ul></li>
        <li>开源(LGPL). </li>
      </ul>
      <h3>
        <a name="1.6">
        </a>1.6 Tibet (开发中; 创建于2005年6月)</h3>
      <p>
        <a href="http://www.technicalpursuit.com/" target="_blank">
          <font color="#ff0000">Tibet</font>
        </a>提供了大量的易移植和完整的JavaScript API，通过这些可以快速生成大量的客户端代码，Tibet自称是企业级AJAX。</p>
      <ul>
        <li>远程脚本调用封装在XMLHttpRequest中 
</li>
        <li>URI支持 
</li>
        <li>支持所有的HTTP事件，不再仅仅是GET和POST 
</li>
        <li>低级的协议-File://和WebDav也可以当作HTTP正常使用 
</li>
        <li>Web Services调用支持，包括SOAP、XML-RPC等等 
</li>
        <li>大型的Javascript对象库 
</li>
        <li>多种多样的XML操作支持 
</li>
        <li>IDE和开发工具 
</li>
        <li>开源协议(OSI) </li>
      </ul>
      <h3>
        <a name="1.7">
        </a>1.7 AJFORM (创建于2005年6月)</h3>
      <p>
        <a href="http://redredmusic.com/brendon/ajform/" target="_blank">
          <font color="#ff0000">AJFORM</font>
        </a>是一个极易上手的AJAX框架，被用来编写入门级的AJAX代码，提供有以下功能：</p>
      <ul>
        <li>三步安装 
</li>
        <li>自动支持任意HTML表单元素 
</li>
        <li>几乎无需编码即可实现AJAX </li>
      </ul>
      <h1>
        <a name="2">
        </a>2 Pure Javascript: Infrastructural Frameworks</h1>
      <h3>
        <a name="2.1">
        </a>2.1 AjaxCaller(创建于2005年5月，目前是Alpha版)</h3>
      <p>
        <a href="http://ajaxify.com/run/testAjaxCaller/" target="_blank">
          <font color="#ff0000">AjaxCaller</font>
        </a>是一个具有多线程安全访问的XMLHttpRequest组件，主要针对Ajax开发新手，目前仍处于alpha开发阶段，仅在<a href="http://www.ajaxpatterns.org/" target="_blank"><font color="#ff0000">AjaxPatterns</font></a>的在线搜索范例中使用了这个程序。 </p>
      <ul>
        <li>用明文或者XML结构的数据实现和服务器的交互(GET/POST/PUT/DELETE) 
</li>
        <li>支持XMLHttRequest对象的构析(销毁对象，C++支持内存对象的构析操作) 
</li>
        <li>支持Response的高速缓存(尚在计划中) 
</li>
        <li>简单的库文件代码易于新手学习使用，并且支持脚本调试 
</li>
        <li>开源协议 </li>
      </ul>
      <h3>
        <a name="2.2">
        </a>2.2 Flash JavaScript Integration Kit</h3>
      <p>
        <a href="http://www.osflash.org/doku.php?id=flashjs" target="_blank">
          <font color="#ff0000">The Flash JavaScript Integration Kit</font>
        </a>可以使Flash和Javascript脚本实现相互集成。</p>
      <ul>
        <li>可以实现在JavaScript中调用Flash ActionScript脚本，反之亦然。 
</li>
        <li>几乎支持双方主要数据类型的在不同环境中的传递调用。 
</li>
        <li>开源协议，有几个Flash开源爱好者维护。 </li>
      </ul>
      <h3>
        <a name="2.3">
        </a>2.3 Google AJAXSLT (2005年6月发行) </h3>
      <p>
        <a href="http://goog-ajaxslt.sourceforge.net/" target="_blank">
          <font color="#ff0000">Google AJAXSLT</font>
        </a>，是一个Javascript框架，用来执行XSLT转换以及XPath查询。</p>
      <ul>
        <li>目前在Google Map上就使用了这个。 
</li>
        <li>开源协议(BSD) </li>
      </ul>
      <h3>
        <a name="2.4">
        </a>2.4 HTMLHttpRequest(Beta版；创建于2005年)</h3>
      <p>
        <a href="http://www.twinhelix.com/javascript/htmlhttprequest/" target="_blank">
          <font color="#ff0000">HtmlHttpRequest</font>
        </a>最大的特点就是运用XMLHttpRequest对象和标准HTML标签IFrame来实现最大限度的跨浏览跨平台的AJAX支持，其原理是在支持XMLHttpRequest的浏览器上调用XMLHttp，如果不支持，就用IFrame来模拟实现异步交互。</p>
      <ul>
        <li>目前支持的浏览器：IE6/Win, IE5.5/Win, IE5/Win, IE4/Win, Mozilla/Win, Opera7/Win, Safari/Mac, IE5/Mac 
</li>
        <li>尚未测试的浏览器：IE4/Mac, Mozilla/Mac, Opera/Other, Konqueror/Linux。 
</li>
        <li>开源协议(LGPL) </li>
      </ul>
      <h3>
        <a name="2.5">
        </a>2.5 Interactive Website Framework (创建于2005年)</h3>
      <p>
        <a href="http://sourceforge.net/projects/iwf/" target="_blank">
          <font color="#ff0000">Interactive Website Framework</font>
        </a>定位在浏览器中支持各种各样的AJAX基础应用的开源项目。自称是通过JavaScript、CSS、XML和HTML实现高性能的交互式WEB框架，包括一个可定制易读的XML解析器。实际上，IWF是一个AJAX的基础框架，并且还包括一些通用脚本代码。</p>
      <ul>
        <li>实现了线程安全的XMLHttpRequest 
</li>
        <li>对XML Document进行封装，以便创建更具有可读性的代码：<br /><blockquote>var node = doc.groceries.frozen[0].pizza[0].size;</blockquote>封装后的数据读取 
<blockquote>var node = doc.documentElement.firstChild.firstChild.getAttribute("size");</blockquote>原始的DOM操作读取 
</li>
        <li>开源协议 </li>
      </ul>
      <h3>
        <a name="2.6">
        </a>2.6 LibXMLHttpRequest (2003年6月发布) </h3>
      <p>
        <a href="http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html" target="_blank">
          <font color="#ff0000">libXmlRequest</font>
        </a>是一个小型XMLHttpRequest封装包</p>
      <ul>
        <li>用getXML()和postXML()两个事件简化XMLHttpReuqest调用 
</li>
        <li>支持XMLHttpRequest对象池 
</li>
        <li>Response缓存处理 
</li>
        <li>源码可以使用，但是有版权保护。 </li>
      </ul>
      <h3>
        <a name="2.7">
        </a>2.7 MAJAX </h3>
      <p>
        <a href="http://unips.sourceforge.net/devblog/?page_id=2" target="_blank">
          <font color="#ff0000">MAJAX</font>
        </a>是另一个非常小巧的HttpRequest封装包，为收发字符型信息提供简单接口，并为每步动作设置回调界面。</p>
      <h3>
        <a name="2.8">
        </a>2.8 RSLite (x) </h3>
      <p>
        <a href="http://www.ashleyit.com/rs/main.htm" target="_blank">
          <font color="#ff0000">RSLite</font>
        </a>是一个XMLHttpRequest封装组件，作为Brent Ashley的JSRS(JavaScript Remote Scripting)其中的一部分功能单独发布。详情可以看JSRS的介绍</p>
      <h3>
        <a name="2.9">
        </a>2.9 Sack(开发中，成立于2005年5月) </h3>
      <p>
        <a href="http://twilightuniverse.com/2005/05/sack-of-ajax/" target="_blank">
          <font color="#ff0000">Sack</font>
        </a>也是一个很有名字的微型XMLHttpRequest封装包。调用者可以自定义回调函数或者是DOM对象。借助于回调DOM对象，可以把Response回来的数据直接以文本的方式嵌入DOM中。</p>
      <h3>
        <a name="2.10">
        </a>2.10 Sarissa (发布于2003年2月)</h3>
      <p>
        <a href="http://sarissa.sf.net/" target="_blank">
          <font color="#ff0000">Sarissa</font>
        </a>是一个JavaScript API，封装了在浏览器端独立调用XML的功能。</p>
      <ul>
        <li>可移植的XMLHttpRequest对象创造 
</li>
        <li>可移植的XPath查询 
</li>
        <li>可移植的DOM操控 
</li>
        <li>可移植的XSLT 
</li>
        <li>可移植的XML序列化 
</li>
        <li>开源协议(GPL2.0和LGPL2.1) </li>
      </ul>
      <h3>
        <a name="2.11">
        </a>2.11 XHConn (2005年4月发布)</h3>
      <p>
        <a href="http://xkr.us/code/javascript/XHConn/" target="_blank">
          <font color="#ff0000">XHConn</font>
        </a>也是一个小型的XMLHttpRequest封装库。笔者也使用改良过的XHConn，其特点就是调用简单，代码也清晰易读。</p>
      <ul>
        <li>例子： 
<blockquote>new XHConn().connect("mypage.php"，"POST"，"foo=bar&amp;baz=qux"，fnWhenDone);</blockquote></li>
        <li>开源协议许可 </li>
      </ul>
      <h1>
        <a name="3">
        </a>3 Server-Side: Multi-Language</h1>
      <h3>
        <a name="3.1">
        </a>3.1 Cross-Platform Asynchronous INterface Toolkit (2005年5月) </h3>
      <p>
        <a href="http://cpaint.sourceforge.net/" target="_blank">
          <font color="#ff0000">CPAINT</font>
        </a>是一个真正的同时支持PHP和ASP/VBScript脚本的AJAX和JSRS工具包。CPAINT在后台提供你需求的AJAX和JSRS代码，并自动返回到浏览器端相应的Javascript脚本代码，这种方式易于实时反馈需求的WEB应用程序。</p>
      <ul>
        <li>支持PHP和ASP 
</li>
        <li>所有功能函数都在统一的JavaScript文件中 
</li>
        <li>支持远程脚本和XML 
</li>
        <li>支持本地和远程函数调用 
</li>
        <li>可以创建单个或多个XMLHttp对象 
</li>
        <li>返回给后台的数据即可以是文本也可以是XML/DOM文档对象 
</li>
        <li>支持POST和GET 
</li>
        <li>用服务端代理的方式实现远程函数和数据的访问操作 
</li>
        <li>大部分浏览器中测试正常使用 
</li>
        <li>在GNU、GPL、LGPL开源协议保护下发行 </li>
      </ul>
      <h3>
        <a name="3.2">
        </a>3.2 SAJAX (2005年3月) </h3>
      <p>
        <a href="http://www.modernmethod.com/sajax/" target="_blank">
          <font color="#ff0000">SAJAX</font>
        </a>的实现方式很独特，例如：调用一个javascript方法x_calculateBudget()，将先把响应传到服务器并调用一个Java calculateBudget()方法，然后以javascript方式把值返回到x_calculateBudget_cb()中。SAJAX的名气不错，估计很多人都听过甚至用过，不过缺点就是它的这套映射理论感觉较繁锁，远不如一些轻量级的封装库好用，不过SAJAX最大的特点就是支持的平台丰富，几乎囊括了WEB下常用的编程语言和平台</p>
      <ul>
        <li>很方便从JavaScript函数映射到服务端代理操作 
</li>
        <li>支持多种平台(ASP/ColdFusion/Io/Lua/Perl/PHP/Python/Ruby) 
</li>
        <li>开源协议 </li>
      </ul>
      <h3>
        <a name="3.3">
        </a>3.3 Javascipt Object Notation (JSON) and JSON-RPC </h3>
      <p>
        <a href="http://www.crockford.com/JSON/index.html" target="_blank">
          <font color="#ff0000">JSON</font>
        </a>是一个"face-free" XML，而<a href="http://www.json-rpc.org/" target="_blank"><font color="#ff0000">JSON-RPC</font></a>是一种远程交互协议，类似于XML-RPC，对JavaScript支持较强</p>
      <ul>
        <li>
          <a href="http://www.json-rpc.org/impl.xhtml" target="_blank">
            <font color="#ff0000">支持多服务端平台</font>
          </a>: Java, Python, Ruby, Perl. 
</li>
        <li>针对不同的平台有不同的包和许可协议, 如<a href="http://oss.metaparadigm.com/jsonrpc/" target="_blank"><font color="#ff0000">JSON-RPC-Java</font></a>. </li>
      </ul>
      <h3>
        <a name="3.4">
        </a>3.4 JavaScript Remote Scripting(JSRS)(2000年) </h3>
      <p>
        <a href="http://www.ashleyit.com/rs/jsrs/test.htm" target="_blank">
          <font color="#ff0000">JSRS</font>
        </a>，较经典的远程脚本访问组件，支持将客户端数据通过服务器做代理进行远程的数据/操作交互。</p>
      <ul>
        <li>支持的浏览器：IE4+，NS4.x，NS6.x，Mozilla，Opera7和Galeon。 
</li>
        <li>服务器端脚本语言支持：ASP，ColdFusion，PerlCGI，PHP,Python和JSP(servlet)。 
</li>
        <li>开源协议。由<a href="http://www.ashleyit.com/" target="_blank"><font color="#ff0000">Brent Ashley</font></a>提供支持。 </li>
      </ul>
      <h3>
        <a name="3.5">
        </a>3.5 Bitkraft for ASP.NET </h3>
      <p>
        <a href="http://www.tiggrbitz.com/" target="_blank">
          <font color="#ff0000">Bitkraft</font>
        </a>是个基于(.NET)Web框架的CLR(公共语言运行库)，允许用独特的方式创建和操作分布式Web内容。用C#编写，运行在微软的.NET 1.1和Mono框架下，无缝式的客户端-服务器响应方式是它的最大特点。Bitkraft没有使用XML组织数据，而是用JSON代替。</p>
      <ul>
        <li>支持的浏览器： IE5+, Firefox1+, NS6 
</li>
        <li>服务器端要求：ASP.NET, Mono XSP, Cassini, Apache (modMono) .NET Framework 1.1+ 
</li>
        <li>事件驱动 
</li>
        <li>支持同步和异步的远程代理 
</li>
        <li>客户端支持所有的.NET类型或自定义类对象映射到JSON中 
</li>
        <li>用JSON取代XML 
</li>
        <li>免费，开源许可协议 </li>
      </ul>
      <h1>
        <a name="4">
        </a>4 Server-Side: Java </h1>
      <h3>
        <a name="4.1">
        </a>4.1 WebORB for Java (2005年8月) </h3>
      <p>
        <a href="http://www.themidnightcoders.com/weborb/aboutWeborb.htm" target="_blank">
          <font color="#ff0000">WebORB for Java</font>
        </a>是一个开发AJAX和基于Flash的富客户端应用程序的开发平台。<a href="http://www.themidnightcoders.com/examples" target="_blank"><font color="#ff0000">在线例子</font></a></p>
      <ul>
        <li>WebORB包括一个富客户端开发类库。提供简单的在线式API用来绑定或者调用任何Java对象、XML Web Services和EJB 
</li>
        <li>支持异步或同步的事件驱动 
</li>
        <li>不需要在服务端修改任何代码，不需要自定义方法或属性、变量等。不要求设计时指定代理等。 
</li>
        <li>同步调用不需要回调，异步调用需要一个回调方法。 
</li>
        <li>客户端可以向服务端请求指定的活动方式，不需要任何编程就可以把处理结果轻易的转变为状态。 
</li>
        <li>提供一个特定API来处理数据库查询结果-服务器代码能返回DataSet或者DataTable，而客户端以一个类似于RecordSet的JavaScript对象来显示这个结果。该对象提供检索列名和行数据的方法。 
</li>
        <li>支持数据分页技术。客户应用程序能检索页面中的数据。 
</li>
        <li>支持以参数的方式返回所有服务期端数据类型，如primitives, strings, complex types, arrays, native .net collections, remote references 
</li>
        <li>目前有两个版本：标准版(免费)，专业版(商业许可) </li>
      </ul>
      <h3>
        <a name="4.2">
        </a>4.2 Echo 2 (2005年3月) </h3>
      <p>
        <a href="http://www.nextapp.com/products/echo2/" target="_blank">
          <font color="#ff0000">Echo 2</font>
        </a>允许你用纯Java语言编写AJAX程序。 <a href="http://demo.nextapp.com/InteractiveTest/ia" target="_blank"><font color="#ff0000">Demo</font></a>. </p>
      <ul>
        <li>自动生成HTML和Javascript代码 
</li>
        <li>用XML在客户端-服务端传递消息 
</li>
        <li>如果愿意支持自定义Javascript组件 
</li>
        <li>开源协议(Mozilla Public License or GNU LGPL) </li>
      </ul>
      <h3>
        <a name="4.3">
        </a>4.3 Direct Web Remoting (DWR) (2005) </h3>
      <p>
        <a href="http://www.getahead.ltd.uk/dwr/" target="_blank">
          <font color="#ff0000">Direct Web Remoting</font>
        </a>可以在Javascript代码中直接调用Java方法的应用框架</p>
      <ul>
        <li>类似于SAJAX，可以把Javascript中的请求调用转递到Java方法中并将执行结果返回给Javascript 
</li>
        <li>可以和任何Web框架一起使用，如Struts、Tapestry等等 
</li>
        <li>开源(Apache)，目前该产品被加入到<a href="http://www.huihoo.com/web/ajax/%20//www.opensymphony.com/webwork/" target="_blank"><font color="#ff0000">WebWork</font></a>中 </li>
      </ul>
      <h3>
        <a name="4.4">
        </a>4.4 SWATO (2005) </h3>
      <p>
        <a href="http://swato.dev.java.net/" target="_blank">
          <font color="#ff0000">SWATO</font>
        </a>是一套可重用的和良好集成的Java/JavaScript库，它实现了一种更容易的方式来改变你的web应用程序的交互，通过AJAX方式实现。</p>
      <ul>
        <li>服务端Java库可以非常容易的部署到所有Servlet2.3+兼容的容器中 
</li>
        <li>客户端Javascript库可以在所有支持XMLHttpRequest的浏览器中使用 
</li>
        <li>使用JSON技术在服务端组织POJO数据，这样你可以在任何Javascript环境中(HTML、XUL、SVG)访问这些远程数据，这种方式很容易通过硬编码或者某种成熟的Javascript库集成到当前应用中 
</li>
        <li>提供一个简单接口使你能在Javascript中调用远程的POJO数据 
</li>
        <li>使用&lt;servlet&gt;和&lt;filter&gt;灵活的在web.xml中进行配置，并且可以集成(不是必须)到你的Spring框架中 
</li>
        <li>提供了几个可帮助你快速开发web应用程序的组件(如自动完成的文本框，在线表单，在线列表等等) </li>
      </ul>
      <h3>
        <a name="4.5">
        </a>4.5 AJAX JSP Tag Library </h3>
      <p>
        <a href="http://ajaxtags.sourceforge.net/" target="_blank">
          <font color="#ff0000">The AJAX JSP Tag Library</font>
        </a>是一组JSP标签库，用来AJAX程序开发。可以在J2EE下无需Javascript就能轻松开发AJAX模式的Web Form。标签库为比较通用的AJAX功能提供了5个标签：</p>
      <ul>
        <li>autocomplete: 用户在文本框中输入字符，自动从指定的数据中匹配用户输入的字符，类似于Google Suggest 
</li>
        <li>callout:可以为A标签加入气泡式的消息提示框，不过是实时的服务端取出数据 
</li>
        <li>Select/dropdown:类似于联动菜单，比如地州市的联动下拉框 
</li>
        <li>toggle:开关闸按钮，比如在一个hidden表单域中存储true和falsh，同时显示相应的img图像 
</li>
        <li>update field:更新数据，也就是无刷新提交了。 </li>
      </ul>
      <h3>
        <a name="4.6">
        </a>4.6 AJAX Java Server Faces Framework </h3>
      <p>
        <a href="http://smirnov.org.ru/en/ajax-jsf.html" target="_blank">
          <font color="#ff0000">The AJAX-JSF</font>
        </a>用来把任意的JSF应用程序转变为AJAX应用程序</p>
      <ul>
        <li>
          <a href="http://smirnov.org.ru/myfaces-ajax/ajax.jsf" target="_blank">
            <font color="#ff0000">例子</font>
          </a>：AJAX组件的 MyFaces JSF Tree(树型目录), table scroller(可滚动的表格), tabbed pane(分页栏) 
</li>
        <li>开源协议(<a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank"><font color="#ff0000">Apache Software License</font></a>) </li>
      </ul>
      <h1>
        <a name="5">
        </a>Server-Side: Lisp </h1>
      <h3>
        <a name="5.1">
        </a>5.1 CL-Ajax </h3>
      <p>
        <a href="http://cliki.net/cl-ajax" target="_blank">
          <font color="#ff0000">CL-Ajax</font>
        </a>实现Javascript直接调用服务端Lisp</p>
      <ul>
        <li>生成可带参数的函数 
</li>
        <li>可以回调Javascript函数或者DOM对象 
</li>
        <li>可以集成到SAJAX中 
</li>
        <li>开源许可 </li>
      </ul>
      <h1>
        <a name="6">
        </a>6 Server-Side: .NET </h1>
      <h3>
        <a name="6.1">
        </a>6.1 WebORB for .NET (2005年8月) </h3>
      <p>
        <a href="http://www.themidnightcoders.com/weborb/aboutWeborb.htm" target="_blank">
          <font color="#ff0000">WebORB for .NET</font>
        </a>是一个用.NET和XML Web Services方式开发AJAX和基于Flash的富客户端应用程序(<a href="http://www.themidnightcoders.com/examples" target="_blank"><font color="#ff0000">在线例子</font></a>) </p>
      <ul>
        <li>WebORB包括一个富客户端开发类库。提供简单的在线式API用来绑定或者调用任何.NET对象、XML Web Services 
</li>
        <li>支持异步或同步的事件驱动 
</li>
        <li>不需要在服务端修改任何代码，不需要自定义方法或属性、变量等。不要求设计时指定代理等。 
</li>
        <li>同步调用不需要回调，异步调用需要一个回调方法。 
</li>
        <li>客户端可以向服务端请求指定的活动方式，不需要任何编程就可以把处理结果轻易的转变为状态。 
</li>
        <li>提供一个特定API来处理数据库查询结果-服务器代码能返回DataSet或者DataTable，而客户端以一个类似于RecordSet的JavaScript对象来显示这个结果。该对象提供检索列名和行数据的方法。 
</li>
        <li>支持数据分页技术。客户应用程序能检索页面中的数据。 
</li>
        <li>支持以参数的方式返回所有服务期端数据类型，如primitives, strings, complex types, arrays, native .net collections, remote references 
</li>
        <li>目前有两个版本：标准版(免费)，专业版(商业许可) </li>
      </ul>
      <h3>
        <a name="6.2">
        </a>6.2 Ajax.NET (2005年3月) </h3>
      <p>
        <a href="http://ajax.schwarz-interactive.de/" target="_blank">
          <font color="#ff0000">Ajax.NET</font>
        </a>是首家支持各种方式通过Javascript访问服务端.net的免费库</p>
      <ul>
        <li>类似于SAJAX，能把Javascript请求发送到.NET方法，服务端回传给Javascript，甚至包括串行化自定义类。 
</li>
        <li>可以在Javascript中访问Session和Application数据 
</li>
        <li>缓存查询结果 
</li>
        <li>免费使用源代码 
</li>
        <li>无需更改源代码，允许给Ajax.NET添加和修改方法和属性 
</li>
        <li>所有类支持Javascript客户端返回数据，可以在JavaScript中使用DataSet：res.Tables[0].Rows 
</li>
        <li>使用HtmlControls组件访问和返回数据 
</li>
        <li>页面无需重载，用事件代理(数据访问层) 
</li>
        <li>因为只提供一个调用接口方法，所以服务端CPU占用非常少 </li>
      </ul>
      <h3>
        <a name="6.3">
        </a>6.3 ComfortASP.NET (2005年8月) </h3>
      <p>
        <a href="http://www.daniel-zeiss.de/ComfortASP/" target="_blank">
          <font color="#ff0000">ComfortASP.NET</font>
        </a>可以让开发者在纯.NET下开发类似AJAX(DHTML,JavaScript,XMLHttp)特性的应用程序。</p>
      <ul>
        <li>快速应答 
</li>
        <li>减少HTML传输 
</li>
        <li>减少页面重载 
</li>
        <li>无闪烁的浏览器内容更改 
</li>
        <li>AJAX用户体验， </li>
      </ul>
      <h3>
        <a name="6.4">
        </a>6.4 AjaxAspects (2005年8月) </h3>
      <p>
        <a href="http://ajaxaspects.blogspot.com/" target="_blank">
          <font color="#ff0000">AjaxAspects</font>
        </a>是个可以用Javascript调用服务端WebService事件的引擎</p>
      <ul>
        <li>用标准的SOAP和WSDL进行服务端-客户端通信 
</li>
        <li>用简单的类型和XML对象支持带参数的返回值 
</li>
        <li>缓存支持 
</li>
        <li>动作队列 
</li>
        <li>免费使用，开源协议 </li>
      </ul>
      <h1>
        <a name="7">
        </a>7 Server-Side: PHP </h1>
      <h3>
        <a name="7.1">
        </a>7.1 AjaxAC (2005年4月) </h3>
      <p>
        <a href="http://ajax.zervaas.com.au/" target="_blank">
          <font color="#ff0000">AjaxAC</font>
        </a>用一个单独类封装了完整的应用程序功能</p>
      <ul>
        <li>所有的功能集成在自包含的类中(另外附带一些Javascript库) 
</li>
        <li>调用PHP文件或者HTML页面非常简易，只需创建App类后把类引用传递给需要调用的Javascript对象或者HTML元素即可。 
</li>
        <li>捕获Javascript事件 
</li>
        <li>可以自定义配置数据，并且支持运行时参数更改 
</li>
        <li>无需再Javascript代码中夹杂凌乱的Html代码，所有事件都是被动态附加上的 
</li>
        <li>由于以上两个优点，所以支持良好的模版引擎 
</li>
        <li>容易Hook到PHP类和MySql数据已返回给自己的request 
</li>
        <li>能够容易的用Javascript建立窗口模式应用程序。 </li>
      </ul>
      <h3>
        <a name="7.2">
        </a>7.2 JPSpan </h3>
      <p>
        <a href="http://jpspan.sourceforge.net/wiki/doku.php" target="_blank">
          <font color="#ff0000">JPSPAN</font>
        </a>通过Javascript直接调用PHP中的函数。</p>
      <ul>
        <li>进行了严谨的单元测试 
</li>
        <li>开源许可(PHP) </li>
      </ul>
      <h3>
        <a name="7.3">
        </a>7.3 XAJAX </h3>
      <p>
        <a href="http://xajax.sf.net/" target="_blank">
          <font color="#ff0000">XAjax</font>
        </a>通过Javascript直接调用PHP中的函数</p>
      <ul>
        <li>支持用Javascript调用PHP脚本 
</li>
        <li>开源许可协议 </li>
      </ul>
      <h1>
        <a name="8">
        </a>8 Server-Side: Ruby </h1>
      <h3>
        <a name="8.1">
        </a>8.1 Ruby On Rails </h3>
      <p>
        <a href="http://www.rubyonrails.org/" target="_blank">
          <font color="#ff0000">Ruby On Rails</font>
        </a>是一个支持AJAX的完整Web框架，使用Ruby语言编写，严格按照MVC结构开发。</p>
      <ul>
        <li>当Ajax出现的时候Rails还处于其发展的早期，因此Ajax可能逐渐成为Rails框架的核心。 
</li>
        <li>生成浏览器中大多数/全部的Window应用组件和动画的Javascript脚本。 
</li>
        <li>支持服务器端调用。 
</li>
        <li>队列支持 
</li>
        <li>开源许可 </li>
      </ul>
    </dd>
  </dl>
 <script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/22284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-01-24 22:06 <a href="http://www.cnitblog.com/yemoo/archive/2007/01/24/22284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xhtml的三种标识body &gt; div、,!important　、/**/！用法【摘自蓝色经典】</title><link>http://www.cnitblog.com/yemoo/archive/2006/08/17/15405.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 16 Aug 2006 18:14:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2006/08/17/15405.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/15405.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2006/08/17/15405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/15405.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/15405.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br />Body ＝ Ancestor (祖先或长辈)<br />DIV = ID selector = Parent （父辈）<br />ul, li = Descendeants of the DIV （后代子孙）<br /><br />!important ＝ 主要用于IE Hacks. <br />/**/ = IE／Opera的 Hacks 及Filters 使用。凡使用Hacks 或Filters 的网站，通用说法叫 "Quirkmode".<br />许多 Hacks 及Filters 的使用，主要是让网站在IE5和 Opera ５／6， Netscape 4.x 等浏览器上能正常显示。以今天的浏览器来说，Hacks已经不太需要了， 不过IE 6 还是很多问题，许多网站设计师还是的使用Hacks。<br /><br />这网站记载了所有经已发现的IE bugs及解决方法（hacks）<br /><a href="http://www.positioniseverything.net/explorer.html" target="_blank">http://www.positioniseverything.net/explorer.html</a><br /><br />body&gt;div 是Hacks 的方法，主要针对Opera浏览器。<br /><br />举个例子：<br /><br />div.myDiv { width: 200px; }<br />myDiv 的字体是黑色。 <br /><br />html&gt;div.myDiv 或 body&gt;div.myDiv {<br />html&gt;body div.myDiv { width: 200px; } <br />是告诉Opera div.myDiv 的字体显示为红色。<br /><br />只要在google 里寻找Opera 或IE hacks， 你会更了解如何使用 !important 或 <br />/**/ 或 body&gt;div<br /> <script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/15405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2006-08-17 02:14 <a href="http://www.cnitblog.com/yemoo/archive/2006/08/17/15405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js开发详解【老外的网站】</title><link>http://www.cnitblog.com/yemoo/archive/2006/07/03/13188.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 03 Jul 2006 11:12:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2006/07/03/13188.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/13188.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2006/07/03/13188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/13188.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/13188.html</trackback:ping><description><![CDATA[ <script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br /> <a href="http://www.sergiopereira.com/articles/prototype.js.html" target="_blank">http://www.sergiopereira.com/articles/prototype.js.html</a>

  <img src ="http://www.cnitblog.com/yemoo/aggbug/13188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2006-07-03 19:12 <a href="http://www.cnitblog.com/yemoo/archive/2006/07/03/13188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js开发笔记【转载自java.net】</title><link>http://www.cnitblog.com/yemoo/archive/2006/07/03/13187.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 03 Jul 2006 10:50:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2006/07/03/13187.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/13187.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2006/07/03/13187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/13187.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/13187.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 覆盖版本 1.3.1                                                        1.&#160;Prototype是什么?                                  或许你还没有用过它， prototype.js 是一个由Sam Stephenson写的JavaScr...&nbsp;&nbsp;<a href='http://www.cnitblog.com/yemoo/archive/2006/07/03/13187.html'>阅读全文</a><img src ="http://www.cnitblog.com/yemoo/aggbug/13187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2006-07-03 18:50 <a href="http://www.cnitblog.com/yemoo/archive/2006/07/03/13187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>