| varxmlNodes=req.responseXML.firstChild;//处理回传数据
 LoadDemandNodes(xmlNodes,node); } } 
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
xmlhttp.send('nodePath='+ nodePath);//传送待展开节点的路径 
3.2.2 服务器端处理数据服务器端调用存储过程从数据库中取出出版物模块,并根据客户端传来的待展开节点的路径对出版物模块进行过滤,取出子节点的数据,组织成特定格式的XML文档后返回到客户端。 
为了表示目录树中的节点,在服务器端创建xml元素entry,包含三个属性,见表1。同时,将出版物模块中的元素pmentry和dmentry都转换为entry元素,并通过Response.Write将数据返回。 
表1 服务器端entry元素的属性 
 
    
        
            | 属性 | 
            说明 | 
         
        
            | name | 
            节点显示的文本。 | 
         
        
            | children | 
            true:父节点;false:叶子节点。 | 
         
        
            | url | 
            该节点所链接数据模块的DMC码。只有叶子节点有。 | 
         
    
 
服务器端数据处理的代码如下: 
privatevoid StreamNodeData(XmlNode node) { 
this.Response.ContentType= 'text/xml'; 
StringBuilder sb = new StringBuilder(); 
sb.Append('<entries>'); 
foreach (XmlNode child innode.ChildNodes) { 
if (child.Name == 'pmentry') //如果是pmentry,则entry的属性children为true,表示父节点。 
sb.AppendFormat('<entryname='{0}' children='{1}' />',child.Attributes['title'].Value, 'true'); 
else //如果是dmentry,则entry的属性children为false,表示叶子节点,同时将该数据模块的dmc值赋予属性url。 
sb.AppendFormat('<entry name='{0}' children='{1}'url='{2}'/>', child.Attributes['title'].Value,'false', child.Attributes['dmc'].Value); 
} 
sb.Append('</entries>'); 
this.Response.Write(sb.ToString()); 
this.Response.Flush(); 
this.Response.Close(); 
} 
3.2.3 客户端更新HTML DOM客户端通过xmlhttp.responseXML接受服务器端返回的数据并解析,从而更新HTML页面中相应位置的数据。为了表示父节点,人为加上一个节点显示Loading ...,并将节点闭合,以显示与叶子节点的区别。 
客户端实现HTML DOM更新的代码如下: 
functionLoadDemandNodes(xmlNodes,node){ 
for(vari=0;i<xmlNodes.childNodes.length;i++){ 
varcurrentRecord=xmlNodes.childNodes[i]; 
varurl=currentRecord.getAttribute('url'); 
varnewChild=node.addChild(xmlNodes.childNodes[i].getAttribute('name'));//添加子节点 
if(newChild!=null&&xmlNodes.childNodes[i].getAttribute('children')=='true'){//如果是父节点,添加一个子节点。 
newChild.addChild('Loading...'); 
newChild.setExpanded(false); } 
else{ //如果是叶子节点,设置url属性。 
newChild.element.childNodes[2].setAttribute('URL',url) } 
} 
} 
3.3实现结果通过上述方法,我们设计了某型飞机IETM阅读系统,见图5。系统中数千个数据模块的数据是分级动态加载的,页面加载速度快,并且页面的局部刷新实时稳定。 
  
图5 某型飞机IETM阅读系统 
4结论本文采用ajax技术设计了某型飞机IETM阅读系统中的动态目录树,实现了数据的异步读取和树形目录实时稳定的局部刷新。实践证明,这种方法设计的目录树具有高效、快速、用户体验好等优点,是一种比较理想的树型目录设计方法。 
 
参考文献 
[1]S1000D. International specification fortechnical publications utilizing a common source database(Issue 2.2). ASD&AIA,2005.05 
[2]王沛,冯曼菲. 征服Ajax Web2.0开发技术详解. 人民邮电出版社. 2006.06 
[3]施伟伟,张蓓. 征服Ajax Web2.0快速入门与项目实践. 人民邮电出版社. 2006.06 
[4]冯新,夏靖波,江友谊. 基于Ajax和Smil的交互式电子手册制作方法. 微计算机信息. 2006.22:12-3 
[5]安钊,徐宗昌,郭红芬. IETM中XML技术数据的处理方法. 装甲兵工程学院学报. 2006.10 
  
   2/2   首页 上一页 1 2  |