Ajax:拥抱JSON,让XML走开

Ajax:拥抱JSON,让XML走开(转)

无意中看到的,大家共享一下。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ps:正在发帖的我对JSON一窍不通,但愿我能经得住它的诱惑。阿弥陀佛、无量天尊、阿门..........ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  Ajax(Asynchronous JavaScript and XML)说到底就是一种浏览器异步读取服务器上XML内容的技术。现在的技术凡是跟XML扯上关系,再加上个概念做幌子,就像金装了一样,拽得不行。门外 的人看得很是热闹,门里的人摇摇头不外如是。XML呢,跨平台的新潮语言?其实XML=TXT。XML只是符合很多规范的文本。它本身什么都不是,只是保 存字符的文件。而浏览器异步读取的只是服务器上的文本内容,所以在Ajax开发时完全不必拘泥于XML。[版权所有,www.jialing.net] ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  JSON的来历 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  XML 的作用是格式化数据内容。如果我们不用XML还有什么更好的方法吗?这个答案是JSON。介绍JSON之前我先介绍一下JavaScript这门脚本语 言。脚本语言自身有动态执行的天赋。即我们可以把想要执行的语句放在字符串里,通过eval()这个动态执行函数来执行。字符串里的内容会像我们写的脚本 一样被执行。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  示例1: 复制内容到剪贴板 代码:<HTML>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
<HEAD>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <TITLE>eval example 1</TITLE>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
</HEAD>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
<BODY>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <script>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  str = "alert('hello')";ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  eval(str);ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  </script>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
</BODY>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
</HTML>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  打开页面会弹出hello窗口。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  我们可以在字符串中放任何脚本语句,包括声明语句: 复制内容到剪贴板 代码:ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
<HTML>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
<HEAD>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
<TITLE>eval example 2</TITLE>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
</HEAD>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
<BODY>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
<script>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  define = "{name:'Michael',email:'17bity@gmail.com'}";ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  eval("data = "+define);ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  alert("name:"+data.name);ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  alert("email:"+data.email);ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
</script>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
</BODY>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
</HTML> ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  如果我们在后台异步传来的文本是JavaScript的声明语句,那么不是一条eval方法就能解析了?对于解析复杂的XML,这样的效率是多么大的提高啊!ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  现在就来告诉你什么是JSON:JavaScript Object Notation。我更愿意把它翻译为JavaScript对象声明。比如要从后台载入一些通讯录的信息,如果写成XML,如下: 复制内容到剪贴板 代码:ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
<contact>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <friend>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <name>Michael</name>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <email>17bity@gmail.com</email>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <homepage>http://www.jialing.net</homepage>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  </friend>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <friend>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <name>John</name>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <email>john@gmail.com</email>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <homepage>http://www.john.com/</homepage>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  </friend>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <friend>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <name>Peggy</name>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <email>peggy@gmail.com</email>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  <homepage>http://www.peggy.com/</homepage>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  </friend>ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
</contact> ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
而写成JSON呢: 复制内容到剪贴板 代码:{ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  name:"Michael",ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  email:"17bity@gmail.com",ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  homepage:"http://www.jialing.net"ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
},ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
{ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  name:"John",ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  email:"john@gmail.com",ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  homepage:"http://www.jobn.com"ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
},ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
{ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  name:"Peggy",ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  email:"peggy@gmail.com",ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  homepage:"http://www.peggy.com"ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
}ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  简单的不只是表达上,最重要的是可以丢弃让人晕头转向的DOM解析了。因为只要符合JavaScript的声明规范,JavaScrip会自动帮你解析好 的。Ajax中使用JSON的基本方法是前台载入后台声明JavaScript对象的字符串,用eval方法来将它转为实际的对象,最后通过 DHTML更新页面信息。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
JSON的格式 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  JSON的基本格式如下,图片来自json.org:ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·对象是属性、值对的集合。一个对象的开始于"{",结束于"}"。每一个属性名和值间用":"提示,属性间用","分隔。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·数组是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚

ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚

ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚

ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚

ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·字符串的定义和C或Java基本一致。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚

ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·数字的定义也和C或Java基本一致。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚

ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚

ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
JSON VS XML ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·可读性ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·可扩展性ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·编码难度ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·解码难度ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  ·流行度ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous JavaScript and JSON)了。ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
AJAX并不神秘:揭密各种AJAX控件和类库2006-08-14 05:00 作者: 出处: 动网 责任编辑:方舟 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  Ajax控件和类库现在真的太多了,不知不觉中增加了Ajax的神秘性和复杂性,看到版内很多人为此费解和伤神,决定发此贴谈谈本人对Ajax的观点,希望能让大家对Ajax有一个本质的认识。 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  观点一:Ajax和服务器端技术毫不相关 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  严格的说,与传统web开发相比,Ajax是完完全全的客户端技术。由于很多控件封装了客户端和服务器端的通信过程,因此很多问题也因通信而起。事实上,不论何种Ajax技术,服务器端都是返回的一个纯文本流,再由客户端来处理这个文本。这段文本可以是xml格式,也可以是一个Html片段,也可以是一段JavaScript脚本,或者仅是一个字符串。服务器端仅仅是作为一个数据接口,客户端使用XMLHttpRequest对象来请求这个页面,服务器端在页面内写入结果文本,这个过程和普通的web开发没有任何区别。所不同的只是,客户端在异步获取结果后,不是直接显示在页面,而是由客户端的Javascript脚本处理后再显示在页面。至于各种控件所谓的能返回DataSet对象,Date对象,或者其他的数据类型,都是封装了这个处理过程的结果。 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  观点二:DOM模型是Ajax最本质的技术 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  之所以没有把XMLHttpRequest列为最本质的技术,因为本人觉得它实在是太简单了,它只是可以让浏览器在后台请求一个页面,并将其内容交给JavaScript处理。真正的核心应该是:DOM模型,即文档对象模型。在DOM模型里,Html标记都被认为是一个对象,例如:div对象,table对象等等。DOM模型就规定了这些对象所具有的属性、方法和事件。通过这些性质,可以对一个已经显示于浏览器的页面进行内容的修改,例如增加节点、修改节点位置,删除节点等等。而不仅仅是一个innerHTML属性这么简单,虽然这是一个很有用的属性。 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  观点三:在使用Ajax控件前理解它们的实现 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  使用Ajax控件的确可以提高效率,但如果你空中楼阁般使用控件,那就得不偿失了。从一个控件换到另外一个控件又会有一个漫长的学习曲线。所以应该从底层了解其,况且Ajax实在不是什么高深的技术。其实任何东西的最底层其实都是简单的,但如果封装了这些底层的东西,事情会变得复杂和难以理解。以Asp.net为例,它的定制特性可以使得只要在方法前加上[ajax method]类似这样的标志就可以称为一个异步方法,相信这使得Asp.net的Ajax开发显得更加“高效”或者是“神秘”,而更多的事情则被封装了。同样记住一条,任何对服务器端的请求仅仅是返回纯文本,我们不一定要依赖于封装好的处理过程,而完全可以自己来实现。 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  观点四:学好JavaScript ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  在大多数人看来,JavaScript总不是那么一种正规的语言,随便copy一段就碰巧能运行,学过c之类的人,一看也能看懂,而且在浏览器中常常有脚本错误提示,所以潜意识觉得总不能付之以大任。事实上,要学好Ajax,这就完全是一种错误的看法。javascript作为一种脚本语言,其语法的确不是很严格,但并不妨碍其完成诸多复杂的任务,没有JavaScript,就没有Ajax。所以本人强烈建议,学Ajax前,一定要好好研究一番JavaScript,一般来讲,如果能顺利看懂prototype框架的代码(如:prototype-1.3.1.js),你的JavaScript水平就基本过关了。同时对DOM模型也可以算有一个基本的了解。 ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  观点五:Ajax点缀:CSS ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
  用JavaScript控制CSS其实很简单,基本上每个DOM对象都有一个style对象,只要把css属性里的"-"去掉,并让随后的字母变为大写就可以作为属性使用了,例如:element.style.backgroundColor="#f00";在css是:选择符 {background-color:#f00}ÚN&Œ‹&dotbWwww.cnntec.comÚÄ¢Yæu%O֚
原文地址:https://www.cnblogs.com/newwind521/p/1208516.html