來源
Ajax這個術語源自描述從基于 Web 的應用到基于數據的應用。
Ajax 不是一種新的編程語言,而是一種用于創建更好更快以及交互性更強的Web應用程序的技術。
使用 JavaScript 向服務器提出請求并處理響應而不阻塞用戶核心對象XMLHttpRequest。通過這個對象,您的JavaScript可在不重載頁面的情況與 Web 服務器交換數據,即在不需要刷新頁面的情況下,就可以産生局部刷新的效果。
Ajax 在浏覽器與 Web 服務器之間使用異步數據傳輸(HTTP 請求),這樣就可使網頁從服務器請求少量的信息,而不是整個頁面。
Ajax可使因特網應用程序更小、更快,更友好。
Ajax 是一種獨立于 Web 服務器軟件的浏覽器技術。
Ajax 基于下列 Web 标準:
JavaScript、XML、HTML與 CSS 在 Ajax 中使用的 Web 标準已被良好定義,并被所有的主流浏覽器支持。Ajax應用程序獨立于浏覽器和平台。
Web 應用程序較桌面應用程序有諸多優勢;它們能夠涉及廣大的用戶,它們更易安裝及維護,也更易開發。
不過,因特網應用程序并不像傳統的桌面應用程序那樣完善且友好。通過 Ajax,因特網應用程序可以變得更完善,更友好。
應用
該技術在 1998 年前後得到了應用。允許客戶端腳本發送HTTP請求(XMLHTTP)的第一個組件由Outlook Web Access小組寫成。該組件原屬于微軟 Exchange Server,并且迅速地成為了 Internet Explorer 4.0 的一部分。部分觀察家認為,Outlook Web Access 是第一個應用了 Ajax 技術的成功的商業應用程序,并成為包括Oddpost 的網絡郵件産品在内的許多産品的領頭羊。但是,2005 年初,許多事件使得 Ajax 被大衆所接受。Google 在它著名的交互應用程序中使用了異步通訊,如Google、Google地圖、Google搜索建議、Gmail等。Ajax 這個詞由《Ajax: A New Approach to Web Applications》一文所創,該文的迅速傳播加強了人們使用該項技術的意識。另外,對Mozilla/Gecko 的支持使得該技術走向成熟,變得更為易用。
Ajax 前景非常樂觀,可以提高系統性能,優化用戶界面。Ajax 現有直接框架 AjaxPro,可以引入 AjaxPro.2.dll 文件,可以直接在前台頁面 JavaScript 調用後台頁面的方法。但此框架與表單驗證有沖突。另外微軟也引入了 Ajax 組件,需要添加 AjaxControlToolkit.dll 文件,可以在控件列表中出現相關控件。
發展
許多重要的技術和 Ajax 開發模式可以從現有的知識中獲取。例如,在一個發送請求到服務端的應用中,必須包含請求順序、優先級、超時響應、錯誤處理及回調,其中許多元素已經在Web 服務中包含了。同時,随着技術的成熟還會有許多地方需要改進,特别是UI部分的易用性。
Ajax 開發與傳統的 B/S開發有很大的不同。這些不同引入了新的編程問題,最大的問題在于易用性。由于 Ajax 依賴浏覽器的 JavaScript 和XML,浏覽器的兼容性和支持的标準也變得和 JavaScript 的運行時性能一樣重要了。這些問題中的大部分來源于浏覽器、服務器和技術的組合,因此必須理解如何才能最好的使用這些技術。
綜合各種變化的技術和強耦合的客戶服務端環境,Ajax 提出了一種新的開發方式。Ajax 開發人員必須理解傳統的 MVC 架構,這限制了應用層次之間的邊界。同時,開發人員還需要考慮 B/S 環境的外部和使用 Ajax 技術來重定型 MVC 邊界。最重要的是,Ajax 開發人員必須禁止以頁面集合的方式來考慮 Web 應用而需要将其認為是單個頁面。一旦 UI 設計與服務架構之間的範圍被嚴格區分開來後,開發人員就需要更新和變化的技術集合了。
特點
使用Ajax的最大優點,就是能在不更新整個頁面的前提下維護數據。這使得Web應用程序更為迅捷地回應用戶動作,并避免了在網絡上發送那些沒有改變的信息。
Ajax不需要任何浏覽器插件,但需要用戶允許JavaScript在浏覽器上執行。就像DHTML應用程序那樣,Ajax應用程序必須在衆多不同的浏覽器和平台上經過嚴格的測試。随着Ajax的成熟,一些簡化Ajax使用方法的程序庫也相繼問世。同樣,也出現了另一種輔助程序設計的技術,為那些不支持JavaScript的用戶提供替代功能。
對應用Ajax最主要的批評就是,它可能破壞浏覽器的後退與加入收藏書簽功能。在動态更新頁面的情況下,用戶無法回到前一個頁面狀态,這是因為浏覽器僅能記下曆史記錄中的靜态頁面。一個被完整讀入的頁面與一個已經被動态修改過的頁面之間的可能差别非常微妙;用戶通常都希望單擊後退按鈕,就能夠取消他們的前一次操作,但是在Ajax應用程序中,卻無法這樣做。不過開發者已想出了種種辦法來解決這個問題,HTML5之前的方法大多是在用戶單擊後退按鈕訪問曆史記錄時,通過創建或使用一個隐藏的IFRAME來重現頁面上的變更。(例如,當用戶在Google Maps中單擊後退時,它在一個隐藏的IFRAME中進行搜索,然後将搜索結果反映到Ajax元素上,以便将應用程序狀态恢複到當時的狀态)。
關于無法将狀态加入收藏或書簽的問題,HTML5之前的一種方式是使用URL片斷标識符(通常被稱為錨點,即URL中#後面的部分)來保持追蹤,允許用戶回到指定的某個應用程序狀态。(許多浏覽器允許JavaScript動态更新錨點,這使得Ajax應用程序能夠在更新顯示内容的同時更新錨點。)HTML5以後可以直接操作浏覽曆史,并以字符串形式存儲網頁狀态,将網頁加入網頁收藏夾或書簽時狀态會被隐形地保留。上述兩個方法也可以同時解決無法後退的問題。
進行Ajax開發時,網絡延遲——即用戶發出請求到服務器發出響應之間的間隔——需要慎重考慮。如果不給予用戶明确的回應,沒有恰當的預讀數據,或者對XMLHttpRequest的不恰當處理,都會使用戶感到厭煩。通常的解決方案是,使用一個可視化的組件來告訴用戶系統正在進行後台操作并且正在讀取數據和内容。