- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安XML教程基地 来源:黑客防线网安XML教程基地 浏览次数:0 |
从属列表问题(dependent list problem)"的问题时常被提出。问题时常出现于当你有两个以上的选择列表时,一个主列表有若干个选项,你希望当用户选择主列表中的某个选项时,在其他的从属列表中显示相关的选项。你可以通过eXtensible Markup Language(XML)的数据岛(data islands)来实现这一功能,把XML内嵌到你的HTML中。这一结果对在客户端的XML应用具有实践意义。
假设你为一家名为"CheapPc"的公司工作,你负责让访问公司网站的用户找到用户所在州的"CheapPc"商店。在公司网站上你列出了州名的列表。当一个顾客在主列表中点击选择一个州时,你希望在从属列表中显示相关的商店列表。
问题在于:你怎样填充从属列表而不用刷新该页面或不用每次用户在主列表中选择时都向服务器发送消息?XML数据岛完美地解决这一问题。当用户发出请求,所有商店的数据都连接成一个XML字符串(Listing 1)。返回的结果是一个镶嵌在HTML页面中的数据岛。
根元素包含州名的列表,每个州名的列表依次包含商店的列表。每个商店都有一个相应的ID和城市名。为了生成这一XML字符串,你得用ActiveX Data Object(ADO)查询数据库,并用XML标记符格式化查询结果。把记录集数据格式化成HTML表格和把记录集数据格式化成XM文件之间有一些不同。在本文的后半部分,我将向你展示如何避免过多的串联工作以提高响应时间。你可以点击这里下载例程。
把处理过程移到客户端
当Web服务器返回网页后,所有进一步的操作处理都在客户端进行。我原先认为如果向客户端发送一个大的数据集会使程序的速度放慢。但后来我却发现一次性发送所有数据比在客户与服务器之间来回地进行数据交换快得多。唯一可被注意到的停顿只是在IE5的XML解析器读取数据时的一个短暂的初始化停顿。
HTML文件本身包含有4个元素:一个保存州名数据的选择列表(主列表),XML数据,一个从属列表的div标记占位符,和两个脚本。当州名选择列表的选项发生变化时,第二个脚本就执行(Listing 2)。
你希望每次用户选择一个州时都能从数据岛重新得到相应的商店列表。所以你需要一个脚本去处理州名选择列表的onChange事件:
在这个脚本中重新得到了州名选择列表的值:
Dim stateCode
stateCode=document.all.State.value
接着重新得到所选定州的商店列表。你可以通过两个方法得到这个列表。第一个办法就是获得<XML>标记符的记录集属性的引用:
Dim R
Set R = XMLdata.recordset
通过这个方法得到的记录集是一个标准的ADO记录集对象,字段名都与标记符相对应。这个方法只有在每个记录都有同样的字段的"简单"XML数据文件中才能很好地工作。
第二个方法就比较强大和普遍。IE5把XML数据岛象其他HTML元素一样对待。为了在客户端访问XML数据,你只需通过ID来引用该元素。IE5将返回XML树的根元素(document元素):
set XML = document.all("xmldata")
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |