|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
把处理过程移到客户端 当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") 你用这个document元素可以执行Extensible Stylesheet Language (XSL)查询语句。使用XSL查询语句,你可以得到某个给定层次上的节点列表,包含指定属性的节点列表,或以上两者的任意组合。例如,以下的查询语句返回所有符合用户所选州的商店节点: Dim nodes set nodes = xml.selectNodes ("locations/state[@code=\\\'" & stateCode & "\\\']/store") XSL搜索字符串看起来很象一个文件路径;它有XML树相应各层次的值。用"/"分隔每个层次。以"节点=数值"的匹配方法加到相关节点的"[]"中搜索指定数值的节点,在属性名前加上"@"来搜索包含指定属性的节点。运行selectNodes方式将返回一个IXMLDOMNodes集合对象。最后,显示从属列表。最简朴的方式:根据XSL查询语句返回的节点列表来改变从属列表的标 记符的值: set aList = document.all("cities") aList.options.length = 0 i = 0 For Each N In nodes anID = N.selectSingleNode("id").text aCity = N.selectSingleNode _("city").text aList.options.length = _aList.options.length + 1 aList.options(i).id = anID aList.options(i).value = aCity aList.options(i).innerText = aCity i = i + 1 Next 现在你知道了如何利用XML数据岛来解决从属列表问题。注重:这一技巧不适合于大规模的数据-如那些成千上万的记录-但假如那样的话,那主要还是一个如何显示的问题,而非技术上的问题。假如你发现一个查询语句可能返回不适合的大组记录,你即可以限制返回记录的数目(例如为用户提供一个"More Record"按钮),又可以修改用户界面使用户可以点击下一层次的内容,因此而限制了用户必须选择的记录数目。 返回类别: 教程 上一教程: 浅谈无刷新取得远程数据技术 下一教程: 删除ACCESS数词库中的空记录 您可以阅读与"用XML数据岛解决用户界面问题 - 2"相关的教程: · 用XML数据岛解决用户界面问题 - 3 · 用XML数据岛解决用户界面问题 - 1 · ASP如何更好的解决用户验证问题 · XMLHTTP抓取数据时乱码问题解决 · 模式窗口中提交数据的问题和解决 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |