论坛首页 Web前端技术论坛

AJAX为何一定要用XML?

浏览 19920 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-06-20  
我很困惑,大量的ajax框架中都使用了xml作为传输数据的格式,或者一种自定义的格式,AJAX中的X分量真有那么重吗?
当然,这些框架都很好对得到的xml数据作了封装,能够自动返回js的对象,比如buffalo的封装就非常好。可为什么一定要把解析xml生成数据对象的工作放到客户端?
有那么重要的理由来迫使我们这么做吗?
我更倾向于更加轻量的做法,通过普通GET/POST的参数发送请求,然后在服务器端对业务方法返回的对象进行动态的翻译,组成js的代码(注意这里并不局限于动态翻译为js,还可以翻译其他的任何语言,当然也包括我们可爱的xml),然后传递给客户端。
这就好像在两个国家的人之间进行翻译,两国都能找到说对方语言的人,但是找谁作呢?当然,找对目前所翻译的材料最熟悉的人,比如对文化最熟悉的;同理,对于把类型信息翻译成另外一种语言的结构,应该强类型语言的强项,而不是弱类型的语言的强项,虽然他们两者都能做到。

而且,我记得当初提出AJAX这个概念的作者的那篇文章里,ajax的请求部分,并没有强调用xml,可现在似乎有种趋势,连请求部分也要封装成xml发送到服务器端,有必要吗?就为了能把复杂的对象信息传递给服务器?
那我用普通的请求参数也可以做到阿,想想webwork怎么把表单的信息映射到领域对象的?我们一样能够利用ognl把参数影射到复杂的对象。而ognl的表达式要比组装xml简单多了。user.name=xxx就可以完成那么复杂的<user><name>xxx</name></user>才能完成的工作。

所以我觉得,无论是ajax的请求和响应部分都没那么强烈的需求说要使用xml.用更加平白的解决方案岂不是更好?

本人知识浅薄,有什么说的不对的地方,也请大家指教,我只是想把自己的困惑和大家交流交流。
   发表时间:2005-06-21  
我来说说 XML 和对象的区别。XML 是针对数据的,到目前为止,还没有其它描述方法比 XML 对于数据的描述更加有效。特别是描述具有复杂层次关系的数据,这样的数据在表示层还是很多的,例如一个复杂的菜单或者一棵复杂的目录树。如果仅仅为了描述和传输数据,而不是实现远程方法调用,就没有必要使用对象。对象图当然也能描述这些信息,但是对象图必须要序列化以后才能传输。对象图的序列化有很多方法,XML 就是其中一种很有效的方法。XML 的优点是平台无关性,与操作系统或者编程语言都是无关的。XML 数据还可以借助 DTD/Schema 来做格式校验,保证数据的格式都是正确的。这些 XML 相关技术都是基于标准的技术,而且就在手边可以直接使用。如果采用其它数据描述和传输的方法,都必须要自己建造底层的基础设施,代价就高了(目前还没有足够的证据说服我这些土制方法比使用 XML 的方法更好)。

上次我问 Michael Chen,buffalo 能否支持直接的 XML 数据获取和提交,就是考虑到有些场合还是有必要直接处理 XML 的。其实 buffalo 实现这个需求非常简单(即使 buffalo 不支持,我也可以很快直接使用 XMLHTTP 写一个),Michael 也跟我说这个没有问题。另外对象的序列化/反序列化(或者用 XML Binding 的专业术语叫做 marshal/unmarshal)也是要付出性能代价的。所以现在流行的是采用轻量级的方法,例如 buffalo/json-rpc,而不是采用重量级的方法例如 soap/xml-rpc。

我和 Michael 讨论后认为,Ajax 中的关键还是异步(就是 A),异步是改善用户交互体验的关键。改善用户的交互体验才是我们的目的,具体采用的技术可以变通。如果不熟悉 XML 的话,完全不用也没有问题(XMLHTTP 可以支持纯文本的传输,不一定是 XML 格式)。JavaScript 在所有这些技术中起到了胶水的作用。
0 请登录后投票
   发表时间:2005-06-21  
我认为,如果不是需求特别强烈,是没有必要使用xml的;当然我并不是排斥xml。我目前设想的一种方式是这样的,客户端能够发送一个http头,表示他所需要的数据格式,比如xml,javascript,plain等,然后服务器端动态根据这些请求将返回值翻译成这些格式。我只是觉得在js/java这两者之间,java更适合处理这些处理这些工作,如果,js仅仅需要的是一个简单的对象,就没有必要传递比较底层的xml格式的数据给他。js应该更加擅长于dlee所说的异步和提高用户体验方面,而不是数据的序列化和反序列化。当然,暴露xml格式给界面层确实在有些时候还是很有必要,比如要使用xstl等,所以我觉得服务器端应该在这方面显得更加敏捷点,能够按需序列化对象。
0 请登录后投票
   发表时间:2005-06-21  
yufan_shi 写道
我认为,如果不是需求特别强烈,是没有必要使用xml的;当然我并不是排斥xml。我目前设想的一种方式是这样的,客户端能够发送一个http头,表示他所需要的数据格式,比如xml,javascript,plain等,然后服务器端动态根据这些请求将返回值翻译成这些格式。我只是觉得在js/java这两者之间,java更适合处理这些处理这些工作,如果,js仅仅需要的是一个简单的对象,就没有必要传递比较底层的xml格式的数据给他。js应该更加擅长于dlee所说的异步和提高用户体验方面,而不是数据的序列化和反序列化。当然,暴露xml格式给界面层确实在有些时候还是很有必要,比如要使用xstl等,所以我觉得服务器端应该在这方面显得更加敏捷点,能够按需序列化对象。


同感,所以我以为 JSON 还是更适合于大部分的AJAX的应用。
0 请登录后投票
   发表时间:2005-06-27  
dlee 写道
XML 是针对数据的,到目前为止,还没有其它描述方法比 XML 对于数据的描述更加有效。特别是描述具有复杂层次关系的数据,这样的数据在表示层还是很多的,例如一个复杂的菜单或者一棵复杂的目录树。


描述复杂层次关系的数据时,用javascript并不弱于xml。
0 请登录后投票
   发表时间:2005-08-22  
如果客户不只是浏览器怎么办,再写一个js的解释器?再把这个解释器嵌到客户端的程序里?
xml的解析相对就好办多了
0 请登录后投票
   发表时间:2005-08-24  
实际上,这是一个伪问题,预设前提是“AJAX一定要用XML”,而这个前提是不成立的。

AJAX并不是一种技术,而是经常在一起用的一组技术;AJAX也不是由哪个公司设计成这样的,而是不同技术在使用中逐渐走到了一起,而XML是里面的一个重要成分。并没有任何必须遵守的规矩说AJAX一定要用什么一定不要用什么。实际上,在AJAX形成之前,组成AJAX的技术就分别应用在各个地方,而当他们放在一起就被称作AJAX,仅此而已。

如果你认为在你的应用中不适合用XML,你可以不用,只不过没有了XML就不要把它叫做AJAX。同理,你也可以只用XML不用Javascript。不要为了AJAX而AJAX,要看这些技术是否适合你的项目。
0 请登录后投票
   发表时间:2005-08-25  
hexiaodong 写道
描述复杂层次关系的数据时,用javascript并不弱于xml。

即便是这样(并不代表我同意这个观点,这个观点仍然需要我们在不断地拷问下验证其正确性),在与 XML Schema 相结合时,XML 可以非常精确地定义数据格式,例如,某个数据如果代表考试成绩的话,可以限制其必须为整数且范围在 0-100 之间。如果用 JavaScript 数组,这些验证都必须你自己写代码来实现。还有,如果数据之间存在着某种依赖关系,例如,某个数据只有在前面出现另一相关数据的时候才能出现,这也是 XML Schema 大显身手的场合,而 JavaScript 数组对于这样的需求就无能为力了(那位说了,谁说无能为力?我自己写代码照样可以解决!)。所以,如果浏览器和服务器之间交换的数据非常复杂、对于数据格式有精确的要求、或者数据之间存在着依赖关系的时候(请注意我的这些前提),完全弃用 XML 实在是舍近求远的做法。还有 XPath 提供了丰富的 pattern 和函数,用来遍历和搜索数据,相对于 JavaScript 数组来说,实在是方便太多。至于灵活性,XML 相对于 JavaScript 数组来说也是只多不少。
正如楼上指出的“Ajax 为何一定要用 XML”其实是一个伪问题,因为我几乎从来没有听人这样说过。那个 duduwolf 写过与楼主观点相似的一篇文章:
http://www.duduwolf.com/post/ajax_x.asp
但是他并不是什么 Ajax 的权威,他对 Ajax 的掌握不过只是初窥门径而已,甚至连如何调试 JavaScript 都搞不清楚,在他的那篇“七宗罪”里面闹了很大的笑话(当然,确实起到了哄抢眼球的效果,从这点来说,作者的目的完全达到了)。在肯定 JavaScript 数组简单方便的同时也没有必要完全否定 XML,还是有大量 XML 非常适用的场合的。不知道为什么很多人对 XML 畏之如虎,实际上掌握 XML 相关的知识并不是非常困难的事情。XML 是 Java 程序员谋生必备的技能之一,对于 Ajax 程序员,难道不是必备的技能之一吗?
0 请登录后投票
   发表时间:2005-08-25  
为何要问AJAX为何一定要用XML?
说乐道理一大堆(指楼主自己的分析),却懒得动手,都成乐空话。
引用

所以我觉得,无论是ajax的请求和响应部分都没那么强烈的需求说要使用xml.用更加平白的解决方案岂不是更好?


你完全可以去探索下,真正摸索过乐,才能知其然知其所以然
所以,说空话前,自己多尝试下,
在这里问这个问题,你是想得到肯定还是否定?得到肯定你能得到什么?得到否定又能怎么样?
你还是不知其所以然......
送五个字:去研究下,实践下,回来做个总结。
0 请登录后投票
   发表时间:2005-08-25  
swing 写道
为何要问AJAX为何一定要用XML?
说乐道理一大堆(指楼主自己的分析),却懒得动手,都成乐空话。
引用

所以我觉得,无论是ajax的请求和响应部分都没那么强烈的需求说要使用xml.用更加平白的解决方案岂不是更好?


你完全可以去探索下,真正摸索过乐,才能知其然知其所以然
所以,说空话前,自己多尝试下,
在这里问这个问题,你是想得到肯定还是否定?得到肯定你能得到什么?得到否定又能怎么样?
你还是不知其所以然......
送五个字:去研究下,实践下,回来做个总结。



字数算得不对啊?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics