﻿<?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-刘文涛-随笔分类-JSON</title><link>http://www.blogjava.net/liuwentao253/category/17442.html</link><description>I am a coder</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:42:42 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:42:42 GMT</pubDate><ttl>60</ttl><item><title>Ajax：拥抱JSON，让XML走开 </title><link>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82210.html</link><dc:creator>刘文涛</dc:creator><author>刘文涛</author><pubDate>Mon, 20 Nov 2006 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82210.html</guid><description><![CDATA[版权所有，转载请注明，来自www.jialing.net<br /><br />Ajax(Asynchronous JavaScript and XML)说到底就是一种浏览器异步读取服务器上XML内容的技术。现在的技术凡是跟XML扯上关系，再加上个概念做幌子，就像金装了一样，拽得不行。门外的人看得很是热闹，门里的人摇摇头不外如是。XML呢，跨平台的新潮语言？其实XML＝TXT。XML只是符合很多规范的文本。它本身什么都不是，只是保存字符的文件。而浏览器异步读取的只是服务器上的文本内容，所以在Ajax开发时完全不必拘泥于XML。[版权所有，www.jialing.net]<br /><br /><b><br /></b><ul><li><b>JSON的来历</b></li></ul><br />XML的作用是格式化数据内容。如果我们不用XML还有什么更好的方法吗？这个答案是JSON。介绍JSON之前我先介绍一下JavaScript这门脚本语言。脚本语言自身有动态执行的天赋。即我们可以把想要执行的语句放在字符串里，通过<font color="#0000ff"><strong>eval()这个动态执行函数</strong></font>来执行。字符串里的内容会像我们写的脚本一样被执行。<br />示例1：<br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">HTML</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">HEAD</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">TITLE</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">eval example 1</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">TITLE</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">HEAD</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">BODY</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">script</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"><br /><strong>         str </strong></span><strong><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">=</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"> </span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">alert('hello')</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span></strong><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"><strong>;<br />         eval(str);</strong><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">script</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">BODY</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">HTML</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div><br />打开页面会弹出hello窗口。<br /><br />我们可以在字符串中放任何脚本语句，包括声明语句：<br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">HTML</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">HEAD</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">TITLE</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">eval example 2</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">TITLE</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">HEAD</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">BODY</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">script</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"><br />      define </span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">=</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"> </span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">{name:'Michael',email:'17bity@gmail.com'}</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">;   //直接量方式<br />     <strong> eval(</strong></span><strong><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">data = </span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">+</span></strong><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"><strong>define);<br /></strong>      alert(</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">name:</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">+</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"><strong>data.name</strong>);<br />      alert(</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">email:</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">+</span><span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"><strong>data.email</strong>);<br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">script</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">BODY</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">HTML</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div><br />如果我们在后台异步传来的文本是JavaScript的声明语句，那么不是一条eval方法就能解析了？对于解析复杂的XML，这样的效率是多么大的提高啊！<br /><br />现在就来告诉你什么是JSON：JavaScript Object Notation。我更愿意把它翻译为JavaScript对象声明。比如要从后台载入一些通讯录的信息，如果写成XML，如下：<br /><br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">contact</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">friend</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">Michael</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">email</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">17bity@gmail.com</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">email</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">homepage</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">http://www.jialing.net</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">homepage</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">friend</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">friend</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">John</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">email</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">john@gmail.com</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">email</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">homepage</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">http://www.john.com</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">homepage</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">friend</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">friend</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">Peggy</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">email</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">peggy@gmail.com</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">email</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">homepage</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">http://www.peggy.com</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">homepage</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">friend</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">contact</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div><br /><br />而写成JSON呢：<br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,0)">[<br /> {<br />   name:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">Michael</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,<br />   email:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">17bity@gmail.com</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,<br />   homepage:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">http://www.jialing.net</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /> },<br /> {<br />   name:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">John</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,<br />   email:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">john@gmail.com</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,<br />   homepage:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">http://www.jobn.com</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /> },<br /> {<br />   name:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">Peggy</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,<br />   email:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">peggy@gmail.com</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,<br />   homepage:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">http://www.peggy.com</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /> }<br />]<br /></span></div><br />简单的不只是表达上，最重要的是可以丢弃让人晕头转向的<strong>DOM解析</strong>了。因为只要符合JavaScript的声明规范，JavaScrip会自动帮你解析好的。<font color="#0000ff"><strong>Ajax中使用JSON的基本方法是前台载入<u>后台声明JavaScript对象的字符串</u></strong></font>，用eval方法来将它转为实际的对象，最后通过DHTML更新页面信息。<br /><br /><ul><li><b>JSON的格式</b></li></ul><br />JSON的基本格式如下，图片来自json.org:<br />对象是属性、值对的集合。一个对象的开始于"{"，结束于"}"。每一个属性名和值间用":"提示，属性间用","分隔。<br /><img height="113" alt="object.gif" src="http://www.blogjava.net/images/blogjava_net/jialing/JSON/object.gif" width="598" border="0" /><br /><br /><br />数组是有顺序的值的集合。一个数组开始于"["，结束于"]"，值之间用","分隔。<br /><img height="113" alt="array.gif" src="http://www.blogjava.net/images/blogjava_net/jialing/JSON/array.gif" width="598" border="0" /><br /><br /><br />值可以是引号里的字符串、数字、true、false、null，也可以是对象或数组。这些结构都能嵌套。<br /><img height="278" alt="value.gif" src="http://www.blogjava.net/images/blogjava_net/jialing/JSON/value.gif" width="598" border="0" /><br /><br /><br />字符串的定义和C或Java基本一致。<br /><img height="413" alt="string.gif" src="http://www.blogjava.net/images/blogjava_net/jialing/JSON/string.gif" width="598" border="0" /><br /><br /><br />数字的定义也和C或Java基本一致。<br /><img height="266" alt="number.gif" src="http://www.blogjava.net/images/blogjava_net/jialing/JSON/number.gif" width="598" border="0" /><br /><br /><br /><ul><li><b>JSON VS XML</b></li></ul><br /><b>可读性</b><br />JSON和XML的可读性可谓不相上下，一边是建议的语法，一边是规范的标签形式，很难分出胜负。<br /><b><br />可扩展性</b><br />XML天生有很好的扩展性，JSON当然也有，没有什么是XML能扩展，JSON不能的。<br /><br /><b>编码难度</b><br />XML有丰富的编码工具，比如Dom4j、JDom等，<font color="#0000ff"><strong>JSON也有json.org提供的工具</strong></font>，但是JSON的编码明显比XML容易许多，即使不借助工具也能写出JSON的代码，可是要写好XML就不太容易了。<br /><br /><b>解码难度</b><br />XML的解析得考虑子节点父节点，让人头昏眼花，而JSON的解析难度几乎为0。这一点XML输的真是没话说。<br /><b><br />流行度</b><br />XML已经被业界广泛的使用，而JSON才刚刚开始，但是在Ajax这个特定的领域，未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous JavaScript and JSON)了。<br /><br />----------------------------<br /><br />评论 ：<br /><br />Q ：不错，json.org有提供什么函数可以像XML里xstream那样，直接binding java对象吗？<br />A ：@江南白衣 <br />         当然有了，参见<a href="http://json-lib.sourceforge.net/" target="_new"><font color="#1d58d1">http://json-lib.sourceforge.net</font></a> <br />         <a href="http://json-lib.sourceforge.net/" target="_new"><font color="#1d58d1">http://json-lib.sourceforge.net</font></a>/usage.html<img src ="http://www.blogjava.net/liuwentao253/aggbug/82210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuwentao253/" target="_blank">刘文涛</a> 2006-11-20 11:46 <a href="http://www.blogjava.net/liuwentao253/archive/2006/11/20/82210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JSON加速AJAX</title><link>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82201.html</link><dc:creator>刘文涛</dc:creator><author>刘文涛</author><pubDate>Mon, 20 Nov 2006 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82201.html</guid><description><![CDATA[
		<div class="blog_content tag_blog_content">
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">
						</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">当微软在IE中添加了用于执行JavaScript的ActiveX XMLHTTP对象以后，仿佛播下了AJAX这一Web应用开发的革命的火种。如今，Firefox, Safari, Opera, 以及其他的浏览器都提供了XMLHttpRequest，使得他们可以访问；<br /><br />colr.org, backpackit.com, maps.google.com.这些网站的特点就是它们的应用程序表现和感觉和其他桌面应用程序一样，尽管他们运行在浏览器里边。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">在AJAX 里边，当用户查看和与页面交互的时候，页面的JavaScript代码向web服务器请求数据（AJAX里的“异步”）。<br /><br />这些请求是HTTP请求，就像一个浏览器在第一个地方取得页面，其中可以包括任意图片，样式表等等。同样的，XMLHttpRequest对象也可以用来取得各种数据，不只是XML。例如，JavaScript可以使用XMLHttpRequest从web服务器取得一个普通文本文件，并在一个表单里边显示其内容。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">XMLHttpRequest 对象通过查找位于数据前端的Content-type header来分析从web服务器返回的数据的MIME类型。例如，如果类型是text/plain，你可以通过检查XMLHttpRequest对象的 responseText属性来访问该文本。但是，如果类型是text/xml，XMLHttpRequest对象有一个特殊的步骤：它对返回的文档运行一个XML解析，并在内存中建立一个文档对象模型（DOM）树来描述文档，使得文档在responseXML属性中可用。然后，你就可以使用 JavaScript的标准DOM方法来操纵这个对象树并访问每个元素，属性以及树里的其他文本。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">XML 是交换数据的标准方法，但通常不是最好的方法。尽管XML可以为数据添加结构和元数据，但这确实是一个比较麻烦的方法。XML还有相当复杂的语法，需要一个解析器类解析它。<font color="#0000ff"><strong>在JavaScript中，XML必须被解析为DOM树才可以使用</strong></font>。并且，一旦构建了DOM树，你还不得不通过建立相应的 JavaScript对象或其他方法才能在客户端应用程序中使用XML数据。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">幸运的是，还有更好的办法。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">使用JSON</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">JSON也就是JavaScript Object Notation，是一个描述数据的轻量级语法。JSON的优雅是因为它是JavaScript语言的一个子集。接下来你将看到它为什么如此重要。首先，来比较一下JSON和XML语法。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">JSON和XML都使用结构化方法描述数据。例如一个地址簿应用程序可以提供用来产生XML格式的地址卡的web服务：</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">Sean Kelly<br /><br />SK Consulting<br /><br />kelly-AT-seankelly-DOT-biz </font>
				</p>
				<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">
						<br />
						<br />
				</font>
				<address pref="1" type="home">
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">kelly-AT-seankelly-DOT-tv </font>
				</address>
				<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">
						<br />
						<br />+1 214 555 1212<br /><br />+1 214 555 1213<br /><br />+1 214 555 1214<br /><br /><br /></font>
				<address type="work" format="us">
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">1234 Main St<br /><br />Springfield, TX 78080-1216 </font>
				</address>
				<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">
						<br />
						<br />
				</font>
				<address type="home" format="us">
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">5678 Main St<br /><br />Springfield, TX 78080-1316 </font>
				</address>
				<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">
						<br />
						<br />
				</font>
				<address type="work">
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">http://seankelly-DOT-biz/ </font>
				</address>
				<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">
						<br />
						<br />
				</font>
				<address type="home">
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">http://seankelly-DOT-tv/ </font>
				</address>
				<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">
						<br />
						<br />
				</font>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">使用JSON, 形式如下:</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">{<br /><br />“fullname“: “Sean Kelly”,<br /><br />“org“: “SK Consulting”,<br /><br />“emailaddrs”: [<br /><br />{“type“: “work“, “value“: “kelly-AT-seankelly.biz”},<br /><br />{“type“: “home“, “pref“: 1, “value“: “kelly-AT-seankelly.tv”}<br /><br />],<br /><br />“telephones”: [<br /><br />{“type“: “work“, “pref“: 1, “value“: “+1 214 555 1212”},<br /><br />{“type“: “fax“, “value“: “+1 214 555 1213”},<br /><br />{“type“: “mobile“, “value“: “+1 214 555 1214”}<br /><br />],<br /><br />“addresses”: [<br /><br />{“type“: “work“, “format“: “us”,<br /><br />“value“: “1234 Main StnSpringfield, TX 78080-1216”},<br /><br />{“type“: “home“, “format“: “us”,<br /><br />“value“: “5678 Main StnSpringfield, TX 78080-1316”}<br /><br />],<br /><br />“urls”: [<br /><br />{“type“: “work“, “value“: “http://seankelly.biz/”},<br /><br />{“type“: “home“, “value“: “http://seankelly.tv/”}<br /><br />]<br /><br />}</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">如你所看到的，JSON有结构化的嵌套数据元素，这一点和XML相似。JSON也是基于文本的，XML也是如此。两者都使用Unicode。JSON和 XML都很容易阅读。主观上，JSON更清晰，冗余更少。JSON WEB站点严格地描述了JSON语法，目前就是这样的。它确实是一个简单的小语言！ <font color="#0000ff"><strong>XML确实适合标记文档</strong></font>，但是<font color="#000080"><strong>JSON是数据交互的理想格式</strong></font>。每个JSON文档描述了一个这样一个对象，该对象包含有：嵌套对象、数组、字符串、数字、布尔值或空值。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">在这些地址卡例子代码中，JSON版本是更轻量级的，只占用了682字节的空间，而XML版本需要744字节空间。尽管这不是一个可观的节省。而实际的好处则来自解析过程。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">XML对比JSON：地位丧失</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">通过使用XMLHttpRequest对象，可以从你的基于AJAX的应用程序取得XML和JSON文件。典型的，交互代码如下：</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">var req = new XMLHttpRequest();<br /><br />req.open(“GET“, “http://localhost/addr?cardID=32”, /*async*/true);<br /><br />req.onreadystatechange = myHandler;<br /><br />req.send(/*no params*/null);</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">作为WEB服务器响应，你提供的处理器函数（myHandler函数）被多次调用，为你提供提前终止事务，更新进度条等机会。通常的，只有在web请求完成以后才起作用：那时，你就可以使用返回的数据了。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">为了处理XML版本的地址卡数据，myHandler的代码如下：</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">function myHandler() {<br /><br />if (req.readyState == 4 /*complete*/) {<br /><br />// Update address field in a form with first street address<br /><br />var addrField = document.getElementById(‘addr‘;<br /><br />var root = req.responseXML;<br /><br />var addrsElem = root.getElementsByTagName(‘addresses‘[0];<br /><br />var firstAddr = addrsElem.getElementsByTagName(‘address‘[0];<br /><br />var addrText = fistAddr.firstChild;<br /><br />var addrValue = addrText.nodeValue;<br /><br />addrField.value = addrValue;<br /><br />}<br /><br />}</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">值得注意的是你不必解析XML文档：XMLHttpRequest对象自动地解析了，并使responseXML中的DOM树可用。通过使用 responseXML属性，可以调用getElementsByTagName方法查找文档的地址部分，你还可以使用第一个去找到它。然后，可以再次调用getElementsByTagName在地址部分查找第一个地址元素。这就取得了文档的第一个DOM子节点，就是一个文本节点，并取得节点的值，这就是你想要的街道地址。最后，可以在表单域中显示结果。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">确实不是一个简单的工作，现在，使用JSON再试一下：<br /><br />function myHandler() {<br /><br />if (req.readyState == 4 /*complete*/) {<br /><br />var addrField = document.getElementById(‘addr‘;<br /><br />var card = eval(‘(‘ req.responseText ’)’);<br /><br />addrField.value = card.addresses[0].value;<br /><br />}<br /><br />}</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">你所做的第一件事情就是解析JSON响应。但是，<font color="#0000ff"><strong>因为JSON是JavaScript的一个子集</strong></font>，你可以使用JavaScript自己的编译器来解析它，通过调用eval函数。解析JSON仅需要一行！此外，操纵JSON中的对象就像操纵其他JavaScript对象一样。<u>这显然要比通过DOM树来操纵简单</u>，例如： <br /><br />card.addresses[0].value 是第一个街道地址, “1234 Main Stb &amp;” <br /><br />card.addresses[0].type 是地址类型, “work” <br /><br />card.addresses[1] 是家庭地址对象 <br /><br />card.fullname 是card的名称, “Sean Kelly” <br /><br />如果更仔细观察，你可能会发现XML格式中文档至少有一个跟元素，card。这在JSON里是不存在的，为什么？ 大概就是，如果你正在开发JavaScript来访问Web服务，你已经知道你想要得到的。然而，你可以在JSON中这么使用：<br /><br />{“card“: {“fullname”: ...}}<br /><br />使用这个技术，你的JSON文件总是以一个带有单一命名属性的对象开始，该属性标识了对象的种类。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">JSON是快速可靠的吗？ </font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">JSON 提供轻量的小文档，并且JSON在JavaScript更容易使用。XMLHttpRequest自动为你解析了XML文档，而你还要手工解析JSON文件，但是解析JSON比解析XML更慢么？作者通过几千次的反复测试，使用XMLHttpRequest解析XML和解析JSON，<font color="#0000ff">结果是解析JSON比 XML要快10倍</font>！当把AJAX当作桌面应用看待时，速度是最重要的因素，很明显，JSON更优秀。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">当然，你不能总是控制服务器端来为AJAX程序产生数据。你还可以使用第三方服务器代替服务器提供XML格式的输出。并且，如果服务器恰好提供JSON，你可以确定你真的想使用它吗?</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">代码中值得注意的是，你将响应文本直接传入到eval中。如果你控制着服务器，就可以这么做。如果不是，一个恶意服务器可以使你的浏览器执行危险操作。在这样的情况下，你最好使用写在JavaScript中的代码来解析JSON。幸运地，这已经有了。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">说到解析，Python爱好者可能注意到JSON不只是JavaScript的子集，它还是Python的一个子集。你可以在Python中直接执行JSON，或者使用安全JSON解析代替。JSON.org网站列举了许多常用JSON解析器。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">服务器端的JSON</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">到现在为止，你或许将焦点注意在运行在客户浏览器中的基于AJAX的web应用程序使用JSON。自然地，首先，JSON格式的数据必须在服务器端产生。幸运地是，创建JSON或将其他存在的数据转换成JSON是相当简单的。一些WEB应用程序框架，例如TurboGears，自动包括对JSON输出的支持。</font>
				</p>
				<p>
				</p>
				<p>
						<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体,Verdana,Arial,Helvetica,sans-serif">此外商业WEB服务提供商也注意到了JSON。Yahoo最近创建了许多基于JSON的web服务。Yahoo的多种搜索服务，履行计划， del.icio.us，还有高速公路交通服务也都支持JSON输出。毫无疑问，其他主要WEB服务提供商也将加入到对JSON的支持中。</font>......</p>
		</div>
		<!-- 当有评论时 -->
<img src ="http://www.blogjava.net/liuwentao253/aggbug/82201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuwentao253/" target="_blank">刘文涛</a> 2006-11-20 11:22 <a href="http://www.blogjava.net/liuwentao253/archive/2006/11/20/82201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>json官方中文文档</title><link>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82184.html</link><dc:creator>刘文涛</dc:creator><author>刘文涛</author><pubDate>Mon, 20 Nov 2006 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82184.html</guid><description><![CDATA[
		<a href="http://www.json.org/json-zh.html">http://www.json.org/json-zh.html</a>
<img src ="http://www.blogjava.net/liuwentao253/aggbug/82184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuwentao253/" target="_blank">刘文涛</a> 2006-11-20 10:39 <a href="http://www.blogjava.net/liuwentao253/archive/2006/11/20/82184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSON-RPC-Java</title><link>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82179.html</link><dc:creator>刘文涛</dc:creator><author>刘文涛</author><pubDate>Mon, 20 Nov 2006 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82179.html</guid><description><![CDATA[
		<div> JSON-RPC-Java 简单说就是一个web 应用中间件，它允许DHTML直接访问远程的java应用，并无刷新的返回结果。表面上类似于Xml-RPC，或者远程调用EJB。不过JSON-RPC-Java的实现要简单得多，而且最重要的一点，它在客户端是且仅是使用Javascript 。<br /><br />    做web程序的人一定不会陌生  XMLHttpRequest。所以你也许已经猜到 JSON-RPC-Java 框架最底层的实现技术。没错，JSON-RPC-Java 正是使用 XMLHttpRequest 与服务端交换数据并表现出页面无刷新的效果。XMLHttpRequest 我不多说，apple的网站上有一个比较大概的介绍，参见<a href="http://developer.apple.com/internet/webcontent/xmlhttpreq.html"><u><font color="#0000ff">这里</font></u></a>，Mozilla的文档就更详尽了，参见<a href="http://www.mozilla.org/xmlextras/"><u><font color="#0000ff">这里</font></u></a>（很意外，我竟然没有在微软的MSDN上找到一个比较系统的文档）。<br /><br />    从我对现在的所谓新技术的理解，通常是有一个很磅礴的名号，然后便是各巨头一番你捧我喝，实际上却无非是新瓶装老酒。现有的技术套上标准或者规范的外衣，再加上商业吵作，业界就血雨腥风一把。各巨头为了自己的商业利益，订立的繁杂的标准常常让我等望而反胃。<br /><br />    明确了最底层的实现，再看JSON-RPC-Java 就有了一个本质的认识，这有助于我们一件件拨开它神秘的外衣。<br /><br /><strong>    外套 JSON<br /><br /></strong>    JSON (JavaScript Object Notation) 很显然是 JSON-RPC-Java 的基础，它是基于javascript的一种<font color="#0000ff"><strong>简单易读的轻量级数据交换格式</strong></font>。它的主页在<a href="http://www.crockford.com/JSON/"><u><font color="#800080">这里</font></u></a>。<br /><br />    如果不熟悉Javascript，那么理解JSON则有一些困难。在这里我要先引入“直接量(Literals)”这个javascript概念。很不幸，我很难找到一篇中文的文章介绍它，好不容易在Lycos的中文网站上发现一份，但是只能通过 google 的网页快照来访问了，参见 《<a href="http://66.102.7.104/search?q=cache:m3B-WWC2OdUJ:it.lycos.com.cn/arts/itzj/itzjbt/itzjbtjs/818.html+javascript+%E7%9B%B4%E6%8E%A5%E9%87%8F&amp;hl=zh-CN target=_blank"><u><font color="#800080">JavaScript 的直接量</font></u></a>》。<br /><br />    简单说，如果我们要 javascript 创建一个对象，通常情况下可能会这样写：<br />    <br /><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"><img id="Codehighlighter1_31_87_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_87_Open_Text.style.display='none'; Codehighlighter1_31_87_Closed_Image.style.display='inline'; Codehighlighter1_31_87_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_31_87_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_87_Closed_Text.style.display='none'; Codehighlighter1_31_87_Open_Image.style.display='inline'; Codehighlighter1_31_87_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #000000">    function Person(name, sex) </span><span id="Codehighlighter1_31_87_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_31_87_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.sex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sex;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    var p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Person(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">zhaozexin</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    alert(p.name);</span></div><br />    从Javascript 1.2开始，创建一个对象有了一种相当快捷的语法，如下：<br />   
<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"><img id="Codehighlighter1_10_41_Open_Image" onclick="this.style.display='none'; Codehighlighter1_10_41_Open_Text.style.display='none'; Codehighlighter1_10_41_Closed_Image.style.display='inline'; Codehighlighter1_10_41_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_10_41_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_41_Closed_Text.style.display='none'; Codehighlighter1_10_41_Open_Image.style.display='inline'; Codehighlighter1_10_41_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #000000">  var p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_10_41_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_10_41_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">: </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">zhaozexin</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sex</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> : </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;</span></div>       <br />    <font color="#0000ff"><strong>这一句就是对象的“直接量”。</strong></font>这样的语法很象java中的Map里toString()方法的输出。name 就是 key, 'zhaozexin' 就是 value。和Map一样，value除了可以是字符串或者数字以外，还可以是数组，函数或者其他对象。 再说说数组，常见的数组声明如下：<br /><br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    var a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Array();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    a[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">zhaozexin</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    a[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;</span></div><br />    或者<br /> <br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">var a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Array(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">zhaozexin</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />    数组的直接量 如下： var a = ['zhaozexin', 1];  是否觉得也很象 ArrayList 的toString() 方法输出呢。javascript 何以叫 Javascript，那不是没有道理的。<br /><br />    除了代码的简化以外，直接量还有什么好处呢。我们就要关注<br /><br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> eval (codeString) </span></div><br />这个javascript内置函数了，它接受一个字符串参数，当作javascript的代码去解析并执行。所以eval 函数允许 javascript 源代码的动态执行。例如，下面的代码创建了一个包含 Date 对象的新变量 mydate ：<br /><br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">eval(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">var mydate = new Date();</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)。</span></div><br />那么如果我们把“直接量” 作为参数传递给 eval函数，那么就可以动态的创建各式各样的对象了。<br /><br />    更详细的直接量的介绍，可以阅读 《Javascript 权威指南》，我强烈推荐这本书给所有从事web编程的同行。<br />    <br />    现在 JSON 应该容易理解了，它的语法实际就是 javascript 的“直接量”。所以 JSON 的介绍上这样写：<br />    <br />    <u>JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, TCL, and many others. These properties make JSON an ideal data-interchange language.<br /><br /></u>     这诸多的语言实现 JSON 的工作就相当简单了，就仿佛做一个字符串处理程序一样。那么JSON-RPC-Java 我们就可以猜出了大概了：<br />    由java实现一个JSON的服务端与web程序中的 javascript（实现JSON的客户端）通过XMLHttpRequest 交换数据，而数据的格式便是javascript“直接量” 的格式，java服务端分析请求，执行然后依据同样的格式返回结果。很明显，这就是 Xml-RPC 的 javascript 版本。javascript 语法的灵活省却了解析xml的繁杂。javascript 让我如何能不爱你！<br /><br />    外套已经脱完。IT界永远都是春天，衣服不会穿很多的。</div>
<img src ="http://www.blogjava.net/liuwentao253/aggbug/82179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuwentao253/" target="_blank">刘文涛</a> 2006-11-20 10:34 <a href="http://www.blogjava.net/liuwentao253/archive/2006/11/20/82179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSON.simple发布</title><link>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82172.html</link><dc:creator>刘文涛</dc:creator><author>刘文涛</author><pubDate>Mon, 20 Nov 2006 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/liuwentao253/archive/2006/11/20/82172.html</guid><description><![CDATA[
		<a href="http://www.json.org/java/simple.txt">JSON.simple</a>是<a href="http://www.json.org/">JSON</a>的一个Java wrapper.<br />对AJAX/JSON/JSP感兴趣的可以看看。<br /><br /><span id="BlogViewId">JSON是Javascript的一个子集，由<span><a href="http://www.crockford.com/">Douglas Crockford</a>约束，正在提交<a href="http://www.ietf.org/internet-drafts/draft-crockford-jsonorg-json-04.txt">draft</a>到IETF，并<span style="TEXT-DECORATION: underline">在</span><a href="http://developer.yahoo.com/common/json.html">Yahoo!</a>采用。</span>很多应用特别是<a href="http://www.google.com/search?hl=en&amp;q=AJAX&amp;btnG=Google+Search">AJAX</a>使用这种数据交换格式。因为分析简单，所以流行，尤其是在Javascript里面，分析JSON字符串到Javascript对象只要一句话而已(eval)。很多人把JSON当成AJAX中XML的替代者，但JSON和XML可以互相交换的。</span><br /><br />JSON.simple地址：<a href="http://www.json.org/java/simple.txt">http://www.json.org/java/simple.txt</a>.<br />JSON地址：<a href="http://www.json.org/"> http://www.json.org</a><img src ="http://www.blogjava.net/liuwentao253/aggbug/82172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuwentao253/" target="_blank">刘文涛</a> 2006-11-20 10:21 <a href="http://www.blogjava.net/liuwentao253/archive/2006/11/20/82172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于JSON的高级AJAX开发技术</title><link>http://www.blogjava.net/liuwentao253/archive/2006/11/19/82032.html</link><dc:creator>刘文涛</dc:creator><author>刘文涛</author><pubDate>Sun, 19 Nov 2006 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/liuwentao253/archive/2006/11/19/82032.html</guid><description><![CDATA[
		<p>今天写网站后台的时候，突然想用ajax，使用了prototype.js,觉得很好用，但是感觉用xml来返回响应，然后javascript用xmldom来解析数据，感觉有点重复做功，后来发现了<font color="#000080"><strong>原来javascript有一个自己的描述对象的方法，就是 JSON</strong></font>，发现很好用，特摘录JSON介绍一文。</p>
		<p>JSON(JavaScript Object Notation / JavaScript 对象标志 ) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。<br />它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。<br />JSON采用完全独立于语言的文本格式，但是也使用了类似于C语言家族的习惯（包括C, C++, C#, Java, JavaScript, Perl, Python等）。这些特性使JSON成为理想的<font color="#0000ff"><strong>数据交换语言</strong></font>。</p>
		<p> <br />本文将解释如何使用<u>AJAX</u>和<u>JSON分析器</u>在<u>客户端</u>和<u>服务器</u>之间创建复杂的<u>JSON数据传输层</u>。</p>
		<p>
				<font color="#006400" size="5">
						<strong>
								<br />   一、 引言<br /></strong>
				</font> <br />　　毫无疑问，AJAX已经成为当今Web开发中一种强有力的用户交互技术，但是它的许多可能性应用仍然鲜为人知。在本文中，我们将来共同探讨如何使用JavaScript对象标志(JSON)和JSON分析器在服务器和客户端AJAX引擎之间创建复杂而强有力的JSON数据传输层。我们将详细讨论如何创建一组对象(在其它语言中经常被当作一个包)，如何把这些对象<u>串行化为JSON</u>以发送到服务器端，以及如何把服务器端JSON<u>反串行化为客户端JavaScript对象</u>。　　</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">提示】你可以在Douglas Crockford的网站上找到本文中使用的JSON分析器。</span>
		</div>
		<p>　　在继续阅读前，本文假定你已经掌握了JavaScript技术并且了解如何创建一个基本的AJAX引擎，并经由AJAX技术向服务器端发出请求和从服务器端接收响应。为了更好地理解本文中示例，你需要下载本文相应的源码文件。</p>
		<p>　　<font color="#006400" size="5"><strong>二、 开始</strong></font></p>
		<p>　　为了进一步抽象我们的AJAX请求并有助于我们以后在不同的应用程序间共享AJAX引擎代码，本文使用了一个我自己创建的AJAX引擎。为了使用这个引擎，我们简单地导入三个JavaScript文件并且向一个名为AjaxUpdater的对象发出请求。然后，由该引擎来负责处理其它任务，包括把响应代理到在该请求中指定的回调方法中。下面的示例展示了我们如何使用这个引擎发出请求以及导入相关的文件：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/model/Ajax.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/model/HTTP.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/model/AjaxUpdater.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    document.load </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> AjaxUpdater.Update(’GET’， URL， callback);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞  </span>
		</div>
		<p>　　首先，让我们来讨论JavaScript对象。</p>
		<p>　　<font color="#006400" size="5"><strong>三、 JavaScript对象</strong></font></p>
		<p>　　JavaScript以前经常被误解，似乎它主要用于实现客户浏览器端图形效果。其实，JavaScript是一种强有力的语言，特别当它与AJAX以及一个应用程序的服务器端相结合时；但是，即使在客户端，JavaScript也能够实现远比你预料得多的多的功能。面向对象的JavaScript就是一个示例，它能够使我们<u>创建对象</u>，<u>扩展内在对象</u>，甚至能够<u>把我们的对象创建成包</u>以达到更容易的管理之目的。</p>
		<p>　　在本文示例中，我们将创建三个对象：Auto，Car和Wheel。其中，每一个都是简单的对象；在此，我们仅使用它们来展示如何创建一个基本包。</p>
		<p>　　首先，Auto对象被声明为一个新的对象：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">var Auto </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Object(); </span>
		</div>
		<p>　　注意，<u>这个Auto对象将用作Car对象的父类</u>。因此，Car对象将成为Auto对象的一个属性，只不过它被分离到另一个文件中以更易于管理（这个概念经常被用于其它面向对象的语言中，但是在JavaScript中却并不经常提起它）。下面是这个Car对象相应的代码：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">Auto.Car </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Object();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Auto.Car.color </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">#fff</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_86_114_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_114_Open_Text.style.display='none'; Codehighlighter1_86_114_Closed_Image.style.display='inline'; Codehighlighter1_86_114_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_86_114_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_114_Closed_Text.style.display='none'; Codehighlighter1_86_114_Open_Image.style.display='inline'; Codehighlighter1_86_114_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />Auto.Car.setColor </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> function(_color)</span>
				<span id="Codehighlighter1_86_114_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_86_114_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　Auto.Car.color </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> _color;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<strong>Auto.Car.setColor(</strong>
				</span>
				<strong>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">#333</span>
						<span style="COLOR: #000000">"</span>
				</strong>
				<span style="COLOR: #000000">
						<strong>);</strong> </span>
		</div>
		<p>　　如你所见，该Car对象是Auto对象的一个子对象—这分明是一种类对象层次结构。这个对象有一个名为color的属性和一个用于设置它的方法。在此，我们把color属性设置为灰色以覆盖掉缺省的白色。当在后面我们串行化该对象时请牢记住这个事实。</p>
		<p>　　下一个对象，Wheel，是Car的一个子对象：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">Auto.Car.Wheel </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Object();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Auto.Car.Wheel.color </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">#000</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">; </span>
		</div>
		<p>　　在此，Wheel是一个基本对象，但是它展示了对象层次中的又一个层。这个对象有一个称为color的缺省值为黑色（“#000”）的属性。</p>
		<p>　　下面，让我们来分析一下为什么这些对象如此重要以及我们是如何使用它们提供的简单的属性的。  </p>
		<p>
				<font color="#006400" size="5">
						<strong>四、 把JavaScript对象串行化为JSON</strong>
				</font>
		</p>
		<p>　　借助于JSON分析器，我们可以很容易地把刚才创建的JavaScript对象串行化为JSON。首先，我们需要下载该分析器的一个副本，并且要把它添加到文档中。下面是我在本文示例中用于导入该脚本的相应的代码：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/utils/jsonparser.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞ </span>
		</div>
		<p>　　我已经把该分析器添加到我的javascript目录，即一个称为utils的子目录下。</p>
		<p>　　下面是最终的包括到其中用于导入适当的JavaScript文件的代码片断：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/Auto.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/Car.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/Wheel.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/utils/jsonparser.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/model/Ajax.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/model/HTTP.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript/model/AjaxUpdater.js</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞ </span>
		</div>
		<p>　　在导入适当的文件后，我们可以通过把两个div元素和一个onload事件简单地添加到HTML文档中开始串行化。这两个div元素将分别拥有ID：body和loading。其中，这个loading标签将由AJAX引擎使用来指示进度情况，而body标签将用于显示消息。</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">＜div id</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">loading</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">div＞<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜div id</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">body</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">div＞ </span>
		</div>
		<p>　　onload事件相应于body元素并且设置它的innerHTML属性为JavaScript对象（作为一个串行化的JSON字符串）。为了实现这一目的，我在Auto对象上使用了jsonparser.js文件内的toJSONString方法：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">＜body onload</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">document.getElementById('body').innerHTML = '＜b＞Local objects serialized as JSON＜/b＞</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">Auto Object: ’</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> Auto.toJSONString();</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞ </span>
		</div>
		<p> 　　这段代码使用了Auto对象及其所有的子对象，并且使用JSON分析器的toJSONString方法把它们串行化为一个JSON字符串。然后，该数据可以<font color="#0000ff">被用作服务器端的一种数据交换格式</font>。</p>
		<p>　　你可能还记得，在前面我们曾调用了一个称为setColor的方法来改变Car对象的颜色。当时，我使用它是因为我想向你展示串行化能够在运行时刻的任何点上实现，而且还为了反映出对象中最新的数据。</p>
		<p>　　如果你仔细分析一下onload事件，你会注意到，Car和Wheel对象都包装在方括号内，这些方括号代表了父对象（即Auto）。这意味着，该串行化的JavaScript对象能够在运行时刻被发送到服务器端以存储最新的数据，并且也可以在应用程序启动时从服务器端进行接收以便从数据库中检索多数的当前数据。最精彩的部分在于，为了创建一种“无缝”的过程，所有与服务器之间实现的数据交换都可以使用JSON技术来实现。</p>
		<p>　　下面，让我们来看一下相同的数据是如何从服务器端接收的，以及它们是如何被使用最新的数据（典型地，来源于一个数据库）串行化为客户端JavaScript对象的。</p>
		<p>　<font color="#006400" size="5">　五、 把JSON反串行化为客户端JavaScript对象</font></p>
		<p>　　在本文中，我简单地把一个静态文件创建为JSON响应，但是在实际开发中，你可以把这些数据存储在一个数据库中并且使用一种服务器端语言返回它。基于这一能力，我们就可以轻松地创建一种强有力的数据交换过程！在前面，我们已经分析了这一串行化过程。凭基本的AJAX体验，你应该能够理解数据是如何被寄送到服务器端的。现在，让我们着手讨论反串行化的问题。首先来看一个针对本文示例提供的静态JSON文件。这个文件其实是我们在上一节中串行化的数据：</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">
				<img id="Codehighlighter1_0_48_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_48_Open_Text.style.display='none'; Codehighlighter1_0_48_Closed_Image.style.display='inline'; Codehighlighter1_0_48_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_0_48_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_48_Closed_Text.style.display='none'; Codehighlighter1_0_48_Open_Image.style.display='inline'; Codehighlighter1_0_48_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span id="Codehighlighter1_0_48_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_0_48_Open_Text">
						<span style="COLOR: #000000">{</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">Car</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">:</span>
						<span id="Codehighlighter1_7_47_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_7_47_Open_Text">
								<span style="COLOR: #000000">{</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">color</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">#333</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">，</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Wheel</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">:</span>
								<span id="Codehighlighter1_31_46_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_31_46_Open_Text">
										<span style="COLOR: #000000">{</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">color</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">:</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">#000</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">}</span>
								</span>
								<span style="COLOR: #000000">}</span>
						</span>
						<span style="COLOR: #000000">}</span>
				</span>
				<span style="COLOR: #000000"> </span>
		</div>
		<p>　　作为一个请求JSON文件的示例，当我们点击下列链接时将请求这个串行化的Auto对象：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">＜a href</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript:AjaxUpdater.Update(’GET’， ’json/data.js’， displayResponse);</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞Get remote JSON＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">a＞</span>
		</div>
		<p> 　　一旦接收到响应消息，我们的称为displayResponse回调方法就会被激活，然后，我们就能够反串行化并开始使用这些对象：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">＜script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">＞<br /><img id="Codehighlighter1_60_423_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_423_Open_Text.style.display='none'; Codehighlighter1_60_423_Closed_Image.style.display='inline'; Codehighlighter1_60_423_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_60_423_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_423_Closed_Text.style.display='none'; Codehighlighter1_60_423_Open_Image.style.display='inline'; Codehighlighter1_60_423_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    function displayResponse()    </span>
				<span id="Codehighlighter1_60_423_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_60_423_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_107_420_Open_Image" onclick="this.style.display='none'; Codehighlighter1_107_420_Open_Text.style.display='none'; Codehighlighter1_107_420_Closed_Image.style.display='inline'; Codehighlighter1_107_420_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_107_420_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_107_420_Closed_Text.style.display='none'; Codehighlighter1_107_420_Open_Image.style.display='inline'; Codehighlighter1_107_420_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    　</span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(Ajax.checkReadyState(’loading’) </span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">OK</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">)</span>
						<span id="Codehighlighter1_107_420_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_107_420_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    　　var Auto </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> Ajax.request.responseText.parseJSON();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    　　document.getElementById(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">body</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">).innerHTML </span>
								<span style="COLOR: #000000">+=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
								<span style="COLOR: #000000">        ＜b＞Remote JSON unserialized＜</span>
								<span style="COLOR: #000000">/</span>
								<span style="COLOR: #000000">b＞</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">;</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">    　　document.getElementById(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">body</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">).innerHTML </span>
								<span style="COLOR: #000000">+=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
								<span style="COLOR: #000000">        Car color: </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+Auto.Car.color;</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">    　　document.getElementById(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">body</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">).innerHTML </span>
								<span style="COLOR: #000000">+=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
								<span style="COLOR: #000000">        Wheel color: </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+Auto.Car.Wheel.color;</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
								</span>
								<span style="COLOR: #000000">    　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />＜</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">script＞ </span>
		</div>
		<p>　　这是相当激动人心的一部分！一旦我们拥有了该responseText，我们就能够简单地使用JSON分析器中的parseJSON方法来从串行化的数据中重建我们的Auto对象。借助于这个新的Auto对象，我们就可以调用相应的子对象。这个特征允许我们在服务器和客户端来回发送对象—而不必进行大量的分析工作，然而在以前标准的XML响应情况下我们将却必须这样做。这样一来，我们就可以创建出能够基于AJAX技术来保留自身状态的客户端JavaScript对象。  </p>
<img src ="http://www.blogjava.net/liuwentao253/aggbug/82032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuwentao253/" target="_blank">刘文涛</a> 2006-11-19 14:13 <a href="http://www.blogjava.net/liuwentao253/archive/2006/11/19/82032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>