在Ajax 应用程序中实现数据之间交换

作者:凯旋网络来源:凯旋网络
为对象树非常容易。如果喜欢使用 XML,则还需要执行许多其他操作,但这种格式也有其自身的优势。例如,许多类型的客户端可以使用 XML,而 JSON 只在 JavaScript 环境中易于分析。此外,在使用 XML 的情况下,可以更快地发现并修正错误,从而缩短了调试时间。

  使用 JavaScript 访问 DOM 树。JavaScript 的 DOM API 非常类似于 Java 的 org.w3c.dom 程序包。主要的区别在于对属性的访问。在 JavaScript 中可直接访问属性,而 Java 将属性视为私有,您需要通过 get 和 set 方法进行访问。例如,您可通过 dom.documentElement 获得文档的根元素。

  DOM 是一种低级的 API,利用它可以访问已分析文档的结构。例如,在大多数情况下您都想忽略注释,并可能不愿意拥有相邻的文本节点。来看下面这个简单示例:

var xml = "< element>da< !--comment-->ta&"
+ "< ![CDATA[cdata< /element>";


  您可以使用先前介绍的实用函数分析上述 XML 字符串:

var dom = parse(xml);


  您可以在 ajaxUtil.js 中找到 parse() 函数的代码;本例中,该函数返回一个 DOM 树,其根元素包含一个文本节点,其后是一条注释、另一个文本节点和一个字符数据节点。如果希望包含的文本不带注释,则必须迭代元素的子元素,连接文本和字符数据节点的值(其类型分别为 3 和 4):

var element = dom.documentElement;
var childNodes = element.childNodes;
var text = "";
for (var i = 0; i <  childNodes.length; i++)
if (childNodes[i].nodeValue) {
var type = childNodes[i].nodeType;
if (type == 3 || type == 4)
text += childNodes[i].nodeValue;
    }

使用 DOM 时,应当构建一个小的实用函数集,以避免处理上述这些低级细节。

  使用 JavaScript 生成动态内容。Web 浏览器使您可以通过文档对象访问 Web 页面的 DOM 结构。例如,您可以利用 document.getElementById(...) 非常轻松地找到一个元素。还可以创建可插入现有文档的新元素和文本节点。然而,如下所示,通过连接字符串构建 HTML 要更为简单:

function updateInfo(request) {
var shares = eval(request.responseText);
var table = "< table border=1 cellpadding=5>";
table += "< tr>";
table += "< th>Symbol< /th>";
table += "< th>Trend< /th>";
table += "< th>Last Price< /th>";
table += "< /tr>";
for (var i = 0; i <  shares.length; i++) {
var share = shares[i];
var symbol = escapeXML(share.symbol)
var trend = share.trend > 0 ? "+" : "-";
var lastPrice = new Number(share.lastPrice).toFixed(2);
table += "< tr>";
table += "< td>" + symbol + "< /td>";
table += "< td>" + trend + "< /td>";
table += "< td>" + lastPrice + "< /td>";
table += "< /tr>";
    }
table += "< /table>";
document.getElementById("table").innerHTML = table;
}


  通过设置由 getElementById() 返回的对象的 innerHTML 属性,可将生成的 HTML 插入空

元素中,例如:

< div id="table">
< /div>


  本文的示例将 updateInfo() 函数用作回调来处理对 Ajax 请求的响应,该请求是通过 ajaxLogic.js 文件中的 sendInfoRequest 发送到服务器的。如果希望每 5 秒更新一次信息,可使用 JavaScript 的 setInterval() 函数:

var symbols = [ ... ];
setInterval("sendInfoRequest(symbols, updateInfo)", 5000);


  一个名为 DataFeed 的类模拟服务器端的馈送。ajaxCtrl.jsp 页面调用该馈送的 getData() 方法,将

  • 广告推荐