AJAX及使用E4X编写Web服务脚本一


本文先简单介绍一下可以用于 XML的 ECMAScript(ECMAScript for XML,E4X),它是一种对 JavaScript 的简单扩展,这使得编写 XML 脚本非常的简单。在本文中,作者演示了一种称为异步 JavaScript 及 XML(Asynchronous JavaScript and XML,AJAX)的 Web 编程模型,并且向您展示 JavaScript 的一些新 XML 扩展是如何使其更易于实现。

用于 XML 的 ECMAScript

您以前可能没有遇到过这个术语 ECMAScript。它实际上是 JavaScript 的正式名称。欧洲计算机制造商协会(European Computer Manufacturers Association,ECMA)是制定 JavaScript 标准的标准化组织(同时 C# 和CLR 标准也是该协会制定的)。ECMAScript 标准可以从 ECMA Web 站点免费获得。

E4X 是 JavaScript 的扩展,它实际上就是在 JavaScript 中添加了对 XML 的直接支持。它同时也是一种 ECMA 标准(查看参考资料——ECMA-357)。那么它对 XML 的直接支持是什么呢?为什么它具有很高的价值?如果您是一名 JavaScript 程序员,那么您可能已经使用了诸如 Netscape LiveConnect 或者 Rhino (一种运行在 Java? 下的可以免费获得的 JavaScript 库)之类的技术来在您的 JavaScript 中使用这些 Java 库。这也就意味着您在 XML 库的帮助下已经可以创建、操作和使用 XML。同样地,如果您使用了 Microsoft? Internet Explorer,那么您已经通过 Microsoft MSXML2 库获得了 XML 的支持。这样的话,如果您已经使用了那些库文件,那么请做好进行重要变动的准备——E4X 会比它们更简单和容易。

在我们查看样本实例之前,对该试验需要注意:此时 E4X 有两种可用的实现方式。这两种可用的方式都是来自Mozilla。一种是浏览器使用的 C JavaScript 引擎(它是用代码来命名的 SpiderMonkey),并且在最新的 Mozilla 版本——我们使用 Mozilla 1.8a6 中是可用的。E4X 同样在 Rhino 中也是可用的。Rhino 是 Java 内置的 JavaScript 解释程序和编译程序,我们将展示其独立使用及运行在 Axis 内部的情景。两者都可以从 Mozilla 获得。

在这些样本实例中,我们首先从使用 Rhino 的命令行上的 E4X 开始,然后转向在使用 Mozilla 的浏览器内部使用 E4X,同时演示 AJAX 模型。在第二篇文章中,我们将向您展示如何通过将 Rhino 嵌入到 Apache Axis Web 服务引擎中来使用服务器内部的 E4X。但是在我们转向 Web 服务之前,先向您展示 E4X 中的 XML 编程基础。

一个简单样例

我们首先从一个简单的实例开始。我们首先对表示作者的相关信息的 XML 进行分析和操作。我们想得到的 XML 如下所示:

清单 1. 作者 XML 文档







Ant



Shaggy



Blue



176







Paul



Spiky



Grey



178

如果我们以字符串的形式得到了该 XML 文档,那么就可以通过以下简单操作来“解析”该字符串:

var x = new XML(peopleXMLString);

另外,我们也可以简单地将该 XML“嵌入”到代码中:


var x = 





Ant



Shaggy



Blue



176







Paul



Spiky



Grey



178





;

是的——这是正确的——XML 变成了这种语言的一个直接部分。

通过 Rhino 使用 E4X

如果您同我们的操作完全一样,那么现在就可以尝试该操作。Rhino 1.6R1 最新的版本以及来自 Apache 的 XMLBeans 程序库都支持 E4X。使用它们非常的简单,只要获取这些包,将它们解压,然后将 js.jar 和 xbean.jar 添加到您的类路径中,就可以启动 JavaScript 处理程序了。

java -cp js.jar;xbean.jar

org.mozilla.javascript.tools.shell.Main

您现在可以尝试以下实例。您可以将它们从该处剪切并复制,或者将它们包含在 examples1.js 文件中,该文件位于 zip 文件(ws-ajax1code.zip)中,您可以通过点击本文顶部或者底部的代码图标来下载该文件

您仅仅需要使用 JavaScript 的属性就可以查看 XML 的任何部分。例如:

print(x.person[0].name);

Ant

print(x.person[1].hair);

Spiky

您注意到了吗,到目前为止,我们还没有使用诸如 DOM 或者 SAX 之类的 XML API。XML 只是变成了一种 JavaScript 能够理解的本地类型。

使用以下代码来打印两个人的高度:

for each (var h in x..height) { print(h) };

176

178

语法非常有用。它返回所有的,任何深度的能够匹配后面紧跟的标记名称的子元素。因此 x..height 返回 height 标记的数值。

以下是另一个有用的语法:

print(x.person.(name=="Ant").hair);

Shaggy

这将使得在 XML 树中可以很容易地进行查看操作。

一个更复杂的样本实例

假定您想要将高度值从米制度量单位更改为英美制度量单位(也就是英国人常说的英尺和英寸单位)。

下面首先是厘米到英寸的转换...

function metricToImperial(cms) {

var totalinches = Math.round(cms/2.54);

var inch = totalinches%12;

var ft = (totalinches-inch)/12;

var response = ;

response.feet = ft;

response.inches = inch + 2; // we sounded a bit short

response.@measure = "imperial";

return response;

}

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3