AJAX架構匯總

來源:互聯網
上載者:User
ajax|ajax架構

1. Pure http://www.alixixi.com/web/a/javascript: Application Frameworks

1.1 Bindows (成立於2003年)

Backbase是一個通過DHTML、JavaScript、CSS和HTML等技術強勁聯合起來的一套完整的Windows案頭式的WEB應用程式解決方案。Bindows無需下載安裝用戶端支撐組件(如Java、ActiveX或Flash),僅需一個瀏覽器。純OO的理念體現在Bindows任何地方,Bindows或許是筆者見過的最完整最強大的javascript:void(0);">AJAX應用程式平台。
Bindows是商業程式的,使用了來自於MB的技術(總部位於GA USA,主要開發中心在瑞典,成立於2002年)。

Bindows架構提供的功能和特性有:
  • 基於面相對象技術的類和API
  • 一套完整的Windows案頭系統,支援各種特性視窗模式,包括菜單、表單、表格、滑動條、測量儀器視窗和其他一些Windows視窗特性支援。
  • 是開發zero-footprint(零空間佔用)SOA用戶端應用程式首選工具包
  • 原生XML,SOAP和XML-RPC支援
  • 單使用者到企業級開發的支援
  • 內建的完美的javascript:void(0);">AJAX支援
Bindows開發環境:
  • 支援企業級規模的項目開發
  • 跨瀏覽器、跨OS平台的支援
  • 不受伺服器結構限制
  • 良好的與新的、現有的資源互通性
  • 統一的開發介面

1.2 BackBase (成立於2003年)

BackBase是一個完整的瀏覽器端架構,提供了豐富的瀏覽器操作功能,以及對.NET和JAVA平台的整合。
商業化產品,來自於Backbase B.V(總部在Amsterdam,成立於2003年)。

1.3 DOJO (開發中,成立於2004年9月)

DOJO提供完整的輕量級視窗組件和瀏覽器-伺服器訊息映射支援

1.4 Open Rico (開發中;成立於2005年5月;基於早期的一個proprietary 架構)

Open Rico是一個支援Ajax架構和使用者互動的多用途架構。

1.5 qooxdoo (開發中; 成立於2005年5月)

qooxdoo,是另一個發展迅猛的應用程式框架,提供廣泛的UI支援,正在開發基礎架構等特性。
  • 基礎結構特性:
    • 能輕易的捕獲和操縱DOM事件
    • 支援調試
    • 支援一個時間操作的Timer類
    • Getter/Setter支援
  • UI:
    • 視窗組件庫和架構
    • 介面布局管理
    • 映像緩衝和透明PNG圖片處理
  • 開源(LGPL).

1.6 Tibet (開發中; 建立於2005年6月)

Tibet提供了大量的易移植和完整的JavaScript API,通過這些可以快速產生大量的用戶端代碼,Tibet自稱是企業級javascript:void(0);">AJAX。

1.7 AJFORM (建立於2005年6月)

AJFORM是一個極易上手的javascript:void(0);">AJAX架構,被用來編寫入門級的javascript:void(0);">AJAX代碼,提供有以下功能:

2 Pure http://www.alixixi.com/web/a/javascript: Infrastructural Frameworks

2.1 AjaxCaller(建立於2005年5月,目前是Alpha版)

AjaxCaller是一個具有多安全執行緒訪問的XMLHttpRequest組件,主要針對Ajax開發新手,目前仍處於alpha開發階段,僅在AjaxPatterns的線上搜尋範例中使用了這個程式。
  • 用明文或者XML結構的資料實現和伺服器的互動(GET/POST/PUT/DELETE)
  • 支援XMLHttRequest對象的構析(銷毀對象,C++支援記憶體對象的構析操作)
  • 支援Response的快取(尚在計劃中)
  • 簡單的庫檔案代碼易於新手學習使用,並且支援指令碼調試
  • 開源協議

2.2 Flash JavaScript Integration Kit

The Flash JavaScript Integration Kit可以使Flash和Javascript指令碼實現相互整合。

2.3 Google AJAXSLT (2005年6月發行)

Google AJAXSLT,是一個Javascript架構,用來執行XSLT轉換以及XPath查詢。

2.4 HTMLHttpRequest(Beta版;建立於2005年)

HtmlHttpRequest最大的特點就是運用XMLHttpRequest對象和標準HTML標籤IFrame來實現最大限度的跨瀏覽跨平台的javascript:void(0);">AJAX支援,其原理是在支援XMLHttpRequest的瀏覽器上調用XMLHttp,如果不支援,就用IFrame來類比實現非同步互動。

2.5 Interactive Website Framework (建立於2005年)

Interactive Website Framework定位在瀏覽器中支援各種各樣的javascript:void(0);">AJAX基礎應用的開源項目。自稱是通過JavaScript、CSS、XML和HTML實現高效能的互動式WEB架構,包括一個可定製易讀的XML解析器。實際上,IWF是一個javascript:void(0);">AJAX的基礎架構,並且還包括一些泛型指令碼代碼。

2.6 LibXMLHttpRequest (2003年6月發布)

libXmlRequest是一個小型XMLHttpRequest封裝包

2.7 MAJAX

MAJAX是另一個非常小巧的HttpRequest封裝包,為收發字元型資訊提供簡單介面,並為每步動作設定回調介面。

2.8 RSLite (x)

RSLite是一個XMLHttpRequest封裝組件,作為Brent Ashley的JSRS(JavaScript Remote Scripting)其中的一部分功能單獨發布。詳情可以看JSRS的介紹

2.9 Sack(開發中,成立於2005年5月)

Sack也是一個很有名字的微型XMLHttpRequest封裝包。調用者可以自訂回呼函數或者是DOM對象。藉助於回調DOM對象,可以把Response回來的資料直接以文本的方式嵌入DOM中。

2.10 Sarissa (發佈於2003年2月)

Sarissa是一個JavaScript API,封裝了在瀏覽器端獨立調用XML的功能。

2.11 XHConn (2005年4月發布)

XHConn也是一個小型的XMLHttpRequest封裝庫。筆者也使用改良過的XHConn,其特點就是調用簡單,代碼也清晰易讀。

3 Server-Side: Multi-Language

3.1 Cross-Platform Asynchronous INterface Toolkit (2005年5月)

CPAINT是一個真正的同時支援PHP和ASP/VBScript指令碼的javascript:void(0);">AJAX和JSRS工具包。CPAINT在後台提供你需求的javascript:void(0);">AJAX和JSRS代碼,並自動返回到瀏覽器端相應的Javascript指令碼代碼,這種方式易於即時反饋需求的WEB應用程式。

3.2 SAJAX (2005年3月)

SAJAX的實現方式很獨特,例如:調用一個javascript方法x_calculateBudget(),將先把響應傳到伺服器並調用一個Java calculateBudget()方法,然後以javascript方式把值返回到x_calculateBudget_cb()中。SAJAX的名氣不錯,估計很多人都聽過甚至用過,不過缺點就是它的這套映射理論感覺較繁鎖,遠不如一些輕量級的封裝庫好用,不過SAJAX最大的特點就是支援的平台豐富,幾乎囊括了WEB下常用的程式設計語言和平台

3.3 Javascipt Object Notation (JSON) and JSON-RPC

JSON是一個"face-free" XML,而JSON-RPC是一種遠程互動協議,類似於XML-RPC,對JavaScript支援較強

  • 支援多服務端平台: Java, Python, Ruby, Perl.
  • 針對不同的平台有不同的包和許可協議, 如JSON-RPC-Java.

3.4 JavaScript Remote Scripting(JSRS)(2000年)

JSRS,較經典的遠程指令碼訪問組件,支援將用戶端資料通過伺服器做代理進行遠端資料/操作互動。

3.5 Bitkraft for ASP.NET

Bitkraft是個基於(.NET)Web架構的CLR(公用語言運行庫),允許用獨特的方式建立和操作分布式Web內容。用C#編寫,運行在微軟的.NET 1.1和Mono架構下,無縫式的用戶端-伺服器回應程式式是它的最大特點。Bitkraft沒有使用XML組織資料,而是用JSON代替。

  • 支援的瀏覽器: IE5+, Firefox1+, NS6
  • 伺服器端要求:ASP.NET, Mono XSP, Cassini, Apache (modMono) .NET Framework 1.1+
  • 事件驅動
  • 支援同步和非同步遠程代理
  • 用戶端支援所有的.NET類型或自訂類對象映射到JSON中
  • 用JSON取代XML
  • 免費,開源許可協議

4 Server-Side: Java

4.1 WebORB for Java (2005年8月)

WebORB for Java是一個開發javascript:void(0);">AJAX和基於Flash的富用戶端應用程式的開發平台。線上例子

4.2 Echo 2 (2005年3月)

Echo 2允許你用純Java語言編寫javascript:void(0);">AJAX程式。 Demo.

4.3 Direct Web Remoting (DWR) (2005)

Direct Web Remoting可以在Javascript代碼中直接調用Java方法的應用程式框架

4.4 SWATO (2005)

SWATO是一套可重用的和良好整合的Java/JavaScript庫,它實現了一種更容易的方式來改變你的web應用程式的互動,通過javascript:void(0);">AJAX方式實現。

4.5 javascript:void(0);">AJAX JSP Tag Library

The AJAX JSP Library是一組JSP標籤庫,用來javascript:void(0);">AJAX程式開發。可以在J2EE下無需Javascript就能輕鬆開發javascript:void(0);">AJAX模式的Web Form。標籤庫為比較通用的javascript:void(0);">AJAX功能提供了5個標籤: Tag Library

  • autocomplete: 使用者在文字框中輸入字元,自動從指定的資料中匹配使用者輸入的字元,類似於Google Suggest
  • callout:可以為A標籤加入氣泡式的訊息提示框,不過是即時的服務端取出資料
  • Select/dropdown:類似於聯動菜單,比如地州市的聯動下拉框
  • toggle:開關閘按鈕,比如在一個hidden表單域中儲存true和falsh,同時顯示相應的img映像
  • update field:更新資料,也就是無重新整理提交了。

4.6 javascript:void(0);">AJAX Java Server Faces Framework

The AJAX-JSF用來把任意的JSF應用程式轉變為javascript:void(0);">AJAX應用程式

Server-Side: Lisp

5.1 CL-Ajax

CL-Ajax實現Javascript直接調用服務端Lisp

6 Server-Side: .NET

6.1 WebORB for .NET (2005年8月)

WebORB for .NET是一個用.NET和XML Web Services方式開發javascript:void(0);">AJAX和基於Flash的富用戶端應用程式(線上例子)

6.2 Ajax.NET (2005年3月)

.NET是首家支援各種方式通過Javascript訪問服務端.net的免費庫 Ajax.NET

  • 類似於SAJAX,能把Javascript請求發送到.NET方法,服務端回傳給Javascript,甚至包括序列化自訂類。
  • 可以在Javascript中訪問Session和Application資料
  • 緩衝查詢結果
  • 免費使用原始碼
  • 無需更改原始碼,允許給Ajax.NET添加和修改方法和屬性
  • 所有類支援Javascript用戶端返回資料,可以在JavaScript中使用DataSet:res.Tables[0].Rows
  • 使用HtmlControls組件訪問和返回資料
  • 頁面無需重載,用事件代理(資料訪問層)
  • 因為只提供一個調用介面方法,所以服務端CPU佔用非常少

6.3 ComfortASP.NET (2005年8月)

ComfortASP.NET可以讓開發人員在純.NET下開發類似javascript:void(0);">AJAX(DHTML,JavaScript,XMLHttp)特性的應用程式。

6.4 AjaxAspects (2005年8月)

AjaxAspects是個可以用Javascript調用服務端WebService事件的引擎

7 Server-Side: PHP

7.1 AjaxAC (2005年4月)

AjaxAC用一個單獨類封裝了完整的應用程式功能

7.2 JPSpan

JPSPAN通過Javascript直接調用PHP中的函數。

7.3 XAJAX

XAjax通過Javascript直接調用PHP中的函數

8 Server-Side: Ruby

8.1 Ruby On Rails

Ruby On Rails是一個支援javascript:void(0);">AJAX的完整Web架構,使用Ruby語言編寫,嚴格按照MVC結構開發。

From MoztwWiki
本文章為 Mozilla Developer Center 的 javascript:void(0);">AJAX:Getting Started (http://developer.mozilla.o... 的翻譯。原文的作者與編修曆史可在它的曆史頁 (http://developer.mozilla.o... action=history)上看到。

這篇文章說明 javascript:void(0);">AJAX 相關技術的基礎,並提供執行個體供您上手。




javascript:void(0);">AJAX 是啥?



javascript:void(0);">AJAX (Asynchronous JavaScript and XML, 非同步 JavaScript 及 XML 技術) 是個新詞,但內涵是兩個存在已有一段時間的 JavaScript 功能。這兩種功能以往一直被忽略,在 Gmail、Google suggest 及 Google Maps 出現後才一舉成名天下知。

這兩個 JavaScript 功能 是:

   * 在不重新讀取頁面的情況下對伺服器送出要求(request)
   * 解析、使用 XML 檔案



第一步 – 怎麼發出 XMLHttpRequest



為了用 JavaScript 對伺服器發送 HTTP 要求,你必須先以相關的類別(class)制出實體(instance)。Internet Explorer 首先以 ActiveX 物件方式提供 XMLHTTP 類別,而 Mozilla、Safari 及其他瀏覽器則隨後以 XMLHttpRequest 類別支援此 ActiveX 物件中的類別及屬性。

因此,如果想跨瀏覽器,那麼可以這麼寫:

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
   http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
   http_request = new ActiveXObject("Microsoft.XMLHTTP");
}

(由於這段程式僅供說明,所以是采最簡方式寫出。本文第三步中有另一種我們比較常用的寫法。)

有些版本的 Mozilla 瀏覽器在伺服器送回的資料未含 XML mime-type 檔頭(header)時會出錯。為了避免這個問題,你可以用下列方法覆寫伺服器傳回的檔頭,以免傳回的不是 text/xml。

http_request = new XMLHttpRequest();
http_request.overrideMimeType('text/xml');

接下來是要決定伺服器傳回資料後的處理方式,此時你只要以 onreadystatechange 這個屬性指明要處理傳回值的 JavaScript 函式名稱即可,例如:

http_request.onreadystatechange = nameOfTheFunction;

注意,指定的函式名稱後不加括弧也沒有參數。除了指定函式名稱外,你也能用 Javascript 即時定義函式的方法來定一個新的處理函式,如下:

http_request.onreadystatechange = function(){
   // 做些事
};

決定處理方式之後你得確實發出 request,此時需叫用 HTTP request 類別的 open() 及 send() 方法,如下:

http_request.open('GET', 'http://www.example.org/some.file', true);
http_request.send(null);

   * open() 的第一個參數是 HTTP request 的方法,也就是從 GET、POST、HEAD 中擇一使用,亦可用你主機上支援的方式。為遵循 HTTP 標準,請記得這些方法都是大寫,不然有的瀏覽器(如 Firefox)或許不會理你。其它 HTTP request 可以支援的方法列表請參考 W3C 規格書 (http://www.w3.org/Protocol...。
   * 第二個參數是目標 URL。基於安全考量,你不能叫用同網域以外的網頁。如果網域不同,則叫用 open() 時會出現「許可權不足,拒絕存取」那類的錯誤。通常大夥會犯的錯誤多為在 domain.tld 網的網站下呼叫 www.domain.tld 中的網頁,僅是一點點差別都不行。
   * 第三個參數決定此 request 是否不同步進行,如果設定為 TRUE 則即使伺服器尚未傳回資料也會繼續執行其餘的程式,這也就是 javascript:void(0);">AJAX 中第一個 A 代表的意義。

send() 的參數在以 POST 發出 request 時可以是任何想傳給伺服器的東西,而資料則以查詢字串的方式列出,例如:

name=value&anothername=othervalue&so=on

不過如果你想要以 POST 方式傳送資料,則必須先將 MIME 型態改好,如下:

http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

否則伺服器就不會理你傳過來的資料了。


第二步 – 處理伺服器傳回的資料



傳出 request 時必須提供處理傳回值的函式名稱。

http_request.onreadystatechange = nameOfTheFunction;

那麼來看看這個函式該做些什麼。首先,它必須檢查 request 目前的狀態:如果狀態值為 4 代表伺服器已經傳回所有資訊了,便可以開始解析所得資訊。

if (http_request.readyState == 4) {
   // 一切 ok, 繼續解析
} else {
   // 還沒完成
}

readyState 所有可能的值如下:

   * 0 (還沒開始)
   * 1 (讀取中)
   * 2 (已讀取)
   * 3 (資訊交換中)
   * 4 (一切完成)

(資料來源: MSDN (http://msdn.microsoft.com/...

接下來要檢查伺服器傳回的 HTTP 狀態代碼。所有狀態代碼列表可於 W3C 網站 (http://www.w3.org/Protocol...上查到,但我們要管的是 200 OK 這種狀態。

if (http_request.status == 200) {
   // 萬事具備
} else {
   // 似乎有點問題,或許伺服器傳回了 404 (查無此頁) 或者 500 (內部錯誤) 什麼的
}

檢查傳回的 HTTP 狀態代碼後,要怎麼處理傳回的資料就由你決定了。有兩種存取資料的方式:

   * http_request.responseText – 這樣會把傳回值當字串用
   * http_request.responseXML – 這樣會把傳回值視為 XMLDocument 對象,而後可用 JavaScript DOM 相關函式處理


第三步 - 萬事俱備 - 簡單範例



好,接著就做一次簡單的 HTTP 範例,示範方才的各項技巧。這段 JavaScript 會向伺服器要一份裡頭有「I'm a test.」字樣的 HTML 檔案(test.html),而後以 alert() 將檔案內容列出。


   style="cursor: pointer; text-decoration: underline"
   >
       Make a request


在此範例中:

   * 首先使用者按下「Make a request」
   * 這麼一來就會呼叫 makeRequest() 函式,亦傳入參數值 test.html (也就是那份 HTML 檔的名稱,放在同目錄下)
   * 接著發出 request,而後會將主導權交給 onreadystatechange 指定的 alertContents() 函式
   * alertContents() 檢查回應是否正常,而後以 alert() 將 test.html 的內容列出

你可以由此測試本例 (http://www.w3clubs.com/moz...,也可以參考測試檔案 (http://www.w3clubs.com/moz...。


第四步 – 處理 XML 回應值



前面的例子中,在收到 HTTP 傳回值後我們以物件的 reponseText 屬性使用 test.html 檔案的內容,接著來試試 responseXML 屬性的方法。

首先,我們得做個格式正確的 XML 檔案,以便稍後取用。此檔名喚 test.xml,內容如下:

<--l version="1.0"-->

   I'm a test.


在程式中,我們叫用檔案的地方只須略事修改如下:

...
>
...

接著在 alertContents() 中,我們必須將 alert(http_request.responseText); 改成這樣:

var xmldoc = http_request.responseXML;
var root_node = xmldoc.getElementsByTagName('root').item(0);
alert(root_node.firstChild.data);

這樣一來我們便可取得 responseXML 所傳回的 XMLDocument 對象,而後以 DOM 相關的方法取用 XML 檔案內容。你可以參考 test.xml 的原始碼 (http://www.w3clubs.com/moz... 以及修改過後的測試程式 (http://www.w3clubs.com/moz...。

其他與 DOM 相關的方法,請參考 Mozilla DOM (http://www.mozilla.org/doc... 檔案。
<

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.