在 Ajax 应用程序中实现数据交换(二)

2014-11-23 23:14:02 · 作者: · 浏览: 4
", stock.shares);
xml += attribute("paidPrice", stock.paidPrice);
xml += "";
}
xml += " ";
return xml;
}


  如果您喜好使用 DOM,则可使用 Web 浏览器的 API 分析 XML 和串行化 DOM 树。通过 IE,您可以用新的 ActiveXObject("Microsoft.XMLDOM") 创建一个空文档。然后,可以使用 loadXML() 或 load() 方法分别从字符串或 URL 分析该 XML。在使用 IE 的情况下,每个节点都有一个称为 xml 的属性,您可以利用它获得该节点及其所有子节点的 XML 表示。因此,您可以分析 XML 字符串、修改 DOM 树,然后将该 DOM 串行化回 XML。

Firefox 和 Netscape 浏览器允许您使用 document.implementation.createDocument(...) 创建一个空文档。然后,可以使用 createElement()、createTextNode()、createCDATASection() 等创建 DOM 节点。Mozilla 浏览器还提供了两个分别名为 DOMParser 和 XMLSerializer 的 API。DOMParser API 包含 parseFromStream() 和 parseFromString() 方法。XMLSerializer 类具有串行化 DOM 树的相应方法:serializeToStream() 和 serializeToString()。

  以下函数分析一个 XML 字符串并返回 DOM 文档:

function parse(xml) {
var dom;
try{
dom = new ActiveXObject("Microsoft.XMLDOM");
dom.async = false;
dom.loadXML(xml);
} catch (error) {
try{
var parser = new DOMParser();
dom = parser.parseFromString(xml, "text/xml");
delete parser;
} catch (error2) {
if (debug)
alert("XML parsing is not supported.");
}
}
return dom;
}


  第二个函数串行化一个 DOM 节点及其所有子节点,将 XML 作为字符串返回:

function serialize(dom) {
var xml = dom.xml;
if (xml == undefined) {
try{
var serializer = new XMLSerializer();
xml = serializer.serializeToString(dom);
delete serializer;
} catch (error) {
if (debug)
alert("DOM serialization is not supported.");
}
}
return xml;
}


  还可以使用 XMLHttpRequest 作为分析程序或串行化程序。在从服务器接收到对 Ajax 请求的响应后,该响应会自动进行分析。可通过 XMLHttpRequest 的 responseText 和 responseXML 属性分别访问文本版本和 DOM 树。此外,在将 DOM 树传递至 send() 方法时自动将其串行化。


发送请求。在先前的文章中,我介绍了 XMLHttpRequest API 和一个实用函数 sendHttpRequest(),您可以在提供下载的示例中的 ajaxUtil.js 文件中找到。该函数有四个参数(HTTP 方法、URL、一个参数数组和一个回调),可创建 XMLHttpReq