emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks

在上一篇《Ajax裸奔》中,我们定义了如此一个xml文件:

news.xml:

 

<?xml version="1.0" encoding="gb2312"?>
<data>
 焦点|工行小额账户明年收费 不足300元要归并
&lt;br /&gt;
 财经|
&quot;神六&quot;飞行开销仅为美航天飞机4.5% 花9亿&lt;br /&gt;
 财经|2005能源富豪榜揭榜 超市要撤致癌保鲜膜
&lt;br /&gt;
 证券|神六催生高价股 MBO公司股改 高管一夜暴富
&lt;br /&gt;
 证券|保险公司告基金利益输送 科龙管理班子亮相 
&lt;br /&gt;
 科技|神六飞船成功着陆 载人飞行取得圆满成功
&lt;br /&gt;
 关注|索尼中国不裁员 夏普与南京熊猫分道扬镳 
&lt;br /&gt;
 热点|北电任命新总裁兼CEO 索爱发布第三季财报
&lt;br /&gt;
 数码|300万像素手机推荐 最有降价潜力手机导购
&lt;br /&gt;
 测评|近期五大DC跳水王 怪模怪样个性手机推荐
&lt;br /&gt;
 探索|亚历山大古城的文化历史 胜利者改写历史 
&lt;br /&gt;
</data>

 

这确确实实是一个合法的xml文件,但是不是一个漂亮的xml文件。xml语言的一个巨大的优势是自说明性。上面这个xml语言只说明了一件事:我有一堆数据(data标记),大家拿去用阿。可是怎么用呢,只能靠约定了。
一个漂亮一点的xml应该像这样:

news2.xml:

<?xml version="1.0" encoding="gb2312"?>
<newsList>
 
<title type="焦点">工行小额账户明年收费 不足300元要归并</title>
 
<title type="财经">&quot;神六&quot;飞行开销仅为美航天飞机4.5% 花9亿</title>
 
<title type="财经">2005能源富豪榜揭榜 超市要撤致癌保鲜膜</title>
 
<title type="证券">神六催生高价股 MBO公司股改 高管一夜暴富</title>
 
<title type="证券">保险公司告基金利益输送 科龙管理班子亮相</title>
 
<title type="科技">神六飞船成功着陆 载人飞行取得圆满成功</title>
 
<title type="关注">索尼中国不裁员 夏普与南京熊猫分道扬镳</title>
 
<title type="热点">北电任命新总裁兼CEO 索爱发布第三季财报</title>
 
<title type="数码">300万像素手机推荐 最有降价潜力手机导购</title>
 
<title type="测评">近期五大DC跳水王 怪模怪样个性手机推荐</title>
 
<title type="探索">亚历山大古城的文化历史 胜利者改写历史 </title>
</newsList>

这个xml非常好的说明了所有的事情:xml的内容是新闻标题,每个标题的分类是什么,标题内容是什么,一目了然,甚至一个不懂中文的程序员也可以从xml标记和层次中了解到这些信息,不需要多余的猜测和约定。

第一种方式,我通常称之为AJaH(Asynchronous Javascript and Hyper-text),第二种,我才称为真正的Ajax。

开发Ajax应用中,我们经常要面临的一个选择就是,用上面AJaH的方式还是下面Ajax的方式来组织数据。这并不是可以简单的一刀切的问题,很大程度上取决于开发者对各方面优劣的取舍。我在这里只把两者的优劣大概的列一下。
1 Ajax比较好听,有个球队叫阿贾克斯的就是这么拼的,AjaH就不知道要怎么念才好听了:)
2 AjaH解析起来更容易更快。按照约定包装好的数据只需要最少的加工就可以使用了,按照规范形式包装的数据需要相对复杂的解析过程
3 Ajax更加通用。用Ajax我们很容易就可以吧同一个CGI(广义的cgi)生成的xml数据使用在任何不同的场合,而不需要后台服务程序做出任何修改,用AjaH的话就很可能需要为相同的数据做出不同的版本。
4 AjaX更不容易出错,需要的时候我们可以建立DTD或者xmlschema来自动校验xml数据的正确性,二AjaH的正确性则需要手工验证来保障。
5 Ajax更容易维护和修改。AjaH的数据中往往整合了html/css美工效果和上下文相关的javascript代码,混合编码造成了代码维护的代价比较高。

作为对比,我们试试解析新的news2.xml文件来生成页面:

betterAjax.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
 
<meta http-equiv="Content-Type" content="text/html; charset=gb18030" />
 
<meta name="Author" content="emu" />
 
<meta name="Keywords" content="ajax" />
 
<title> 更好的Ajax例子 </title>
 
<script type="text/JavaScript">
 
<!--
 
var newsXML;
 
function init(){
  newsXML 
= window.XMLHttpRequest?(new XMLHttpRequest()):(new ActiveXObject("Microsoft.XMLHTTP"));
  newsXML.onreadystatechange
= handleXML;
  newsXML.open(
"GET","news2.xml",true);
  newsXML.send(
null);
 }
 
function handleXML(){
  
if(newsXML.readyState==4){
   
var titleList = newsXML.responseXML.getElementsByTagName("title");
   
var st = "";
   
for(var i=0;i<titleList.length;i++){
    x 
= titleList[i];
    st 
+= x.getAttribute("type")+"|"+(x.text?x.text:x.textContent)+"<br />";
   }
   document.body.innerHTML
=st;
  }
 }
 
//-->
 </script>
</head>
<body onload="init()">
</body>
</html>

 

其实做起来也很容易,对不对?把这个页面和前面的news2.xml放到同一个目录下发布即可运行。

本文全部原码下载

posted on 2006-01-26 17:00 emu 阅读(1988) 评论(10)  编辑  收藏

评论

# re: Ajax还是Ajah,这是个问题 2006-02-02 14:50
为何我无法运行成功?
emu能否再测试一下?

就是setp7,还有betterAjax文件

step7的提示
Line:21
Char:4
Code:0
Error:Object required
URL:file://C:\Documents and Settings\Jay-DotKu\My Documents\work\ajax\Ajax01\step7.html

betterAjax则是没有反应  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-02-02 15:40 emu
因为你没有把文件用一个http服务器发布出来。
xmlhttprequest不能访问本地文件系统,需要建立http连接才可以。  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-02-03 15:01 dingsea
好文啊,黄老大!
标记一下。
  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-03-17 09:25 tonghu006
你好,emu,你的这个例子我把它放到IIS中运行怎么运行不出结果来呢,betterajax.html和step7.html  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-03-17 09:30 tonghu006
betterajax.html这个不能运行出效果来,step7.htm现在可以在iis中运行
  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-03-17 14:33 emu
呵呵,我不知道。遇到问题要自己调试。  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-05-11 10:26 worldlover
betterajax.html这个文件运行后没有任何效果,也没有提示错误,这是怎么会事呀????  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-05-22 10:34 tonghu008
请教一个问题,我用ajax,在服务器的后台中我用一个循环送出xml,那么我在客户端接受xml的时候是不是还是要循环接受呢?要是用循环来实现好象不行,怎么才能接受服务器端循环送出的xml文档呢?请指教指教,谢谢!  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-07-14 10:13 aoyuxuan
emu,你的文章太帅了。我一直都在为怎么在多浏览器读取xml发愁呢。我是初学者,所以有些糊涂,但是你的文章后,犹如醍醐灌顶阿。好文,言简意赅。^_^
我还有一个问题,关于xml读取后,做了一个超链接。
怎么样能做到,点击超链接后传到一个页面后,在另一个页面实现根据传得参数调取相应的数据。
就像使用asp,php那样,例 发出页面 http://xxx.asp?title=xxx
接受页面 http://yyy.asp
接受后,根据xxx调出相应的内容。
用aJax 怎么作?  回复  更多评论
  

# re: Ajax还是Ajah,这是个问题 2006-07-15 14:34 emu
这个跟ajax没用关系了,在yyy.asp上可一通过referrer获得发出页面的地址信息来分析(在服务器端和浏览器端获得的方式有点区别),不过更好的做法应该是显式的传递参数:
http://yyy.asp?title=xxx  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: