AJAX及使用E4X編寫Web服務指令碼(1)

來源:互聯網
上載者:User
ajax|web|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 文檔

<people>

<person gender="male">

<name>Ant</name>

<hair>Shaggy</hair>

<eyes>Blue</eyes>

<height measure="metric">176</height>

</person>

<person gender="male">

<name>Paul</name>

<hair>Spiky</hair>

<eyes>Grey</eyes>

<height measure="metric">178</height>

</person>

</people>

如果我們以字串的形式得到了該 XML 文檔,那麼就可以通過以下簡單操作來“解析”該字串:

var x = new XML(peopleXMLString);

另外,我們也可以簡單地將該 XML“嵌入”到代碼中:

var x =

<people>

<person gender="male">

<name>Ant</name>

<hair>Shaggy</hair>

<eyes>Blue</eyes>

<height measure="metric">176</height>

</person>

<person gender="male">

<name>Paul</name>

<hair>Spiky</hair>

<eyes>Grey</eyes>

<height measure="metric">178</height>

</person>

</people>;

是的——這是正確的——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 = <height/>;

response.feet = ft;

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

response.@measure = "imperial";

return response;

}

首先值得注意的一行是:

var response = <height/>;

該行允許您將 XML “嵌入”到 JavaScript 中。採用這種文法有兩個好處:第一,它確實會使 XML 的使用變得很容易。第二,這些代碼的意義非常清晰。

現在您可以向該元素中添加更多的子項目:

response.feet = ft;

這樣建立了 <height> 子項目,其標記名稱被設定為“feet”,並且將數值設定為變數 ft 的值。

您也可以用這種方式操作其屬性:

response.@measure = "imperial";

現在我們使用該功能來更新 XML:

  • Ajax: 一個建立Web應用的新途徑
  • Ajax的錯誤處理機制探討(2)
  • Ajax的錯誤處理機制探討(1)
  • 初次體驗.NET Ajax無重新整理技術
  • Rails系統中的AJAX開發技術簡析(4)


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.