什么是 AJAX, what is AJAX(一)
AJAX全稱為「Asynchronous JavaScript and XML」(非同步JavaScript和XML),是一種創(chuàng)建互動(dòng)式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。它使用:
- 使用XHTML+CSS來(lái)表示信息;
- 使用JavaScript操作DOM Document Object Model進(jìn)行動(dòng)態(tài)顯示及交互;
- 使用 XML 和 XSLT 進(jìn)行數(shù)據(jù)交換及相關(guān)操作;
- 使用 XMLHttpRequest對(duì)象與Web伺服器進(jìn)行非同步數(shù)據(jù)交換;
- 使用 JavaScript 將所有的東西綁定在一起。
參見(jiàn)Ajax的提出者Jesse James Garrett的英文原文中文譯文
類(lèi)似於DHTML或LAMP,AJAX不是指一種單一的技術(shù),而是有機(jī)地利用了一系列相關(guān)的技術(shù)。事實(shí)上,一些基於AJAX的「派生/合成」式(derivative/composite)的技術(shù)正在出現(xiàn),如「AFLAX」。
AJAX的應(yīng)用使用支持以上技術(shù)的web瀏覽器作為運(yùn)行平臺(tái)。這些瀏覽器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Mac OS的Safari。但是Opera不支持XSL格式對(duì)象,也不支持XSLT。[1]
與傳統(tǒng)的web應(yīng)用比較
傳統(tǒng)的web應(yīng)用允許用戶端填寫(xiě)表單(form),當(dāng)提交表單時(shí)就向web伺服器發(fā)送一個(gè)請(qǐng)求。伺服器接收並處理傳來(lái)的表單,然後送回一個(gè)新的網(wǎng)頁(yè)。這個(gè)做法浪費(fèi)了許多頻寬,因?yàn)樵谇搬醿蓚€(gè)頁(yè)面中的大部分HTML代碼往往是相同的。由於每次應(yīng)用的交互都需要向伺服器發(fā)送請(qǐng)求,應(yīng)用的響應(yīng)時(shí)間就依賴於伺服器的響應(yīng)時(shí)間。這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多。
與此不同,AJAX應(yīng)用可以僅向伺服器發(fā)送並取回必需的數(shù)據(jù),它使用SOAP或其它一些基於XML的頁(yè)面服務(wù)介面,併在客戶端採(cǎi)用JavaScript處理來(lái)自伺服器的響應(yīng)。因?yàn)樵谒欧骱蜑g覽器之間交換的數(shù)據(jù)大量減少(大約只有原來(lái)的5%),結(jié)果我們就能看到響應(yīng)更快的應(yīng)用。同時(shí)很多的處理工作可以在發(fā)出請(qǐng)求的客戶端機(jī)器上完成,所以Web伺服器的處理時(shí)間也減少了。
[編輯]發(fā)展史
該技術(shù)在1998年前後得到了應(yīng)用。允許客戶端腳本發(fā)送HTTP請(qǐng)求(XMLHTTP)的第一個(gè)組件由Outlook Web Access小組寫(xiě)成。該組件原屬於微軟Exchange Server,並且迅速地成為了Internet Explorer 4.0[2]的一部分。部分觀察家認(rèn)為,Outlook Web Access是第一個(gè)應(yīng)用了Ajax技術(shù)的成功的商業(yè)應(yīng)用程序,併成為包括Oddpost的網(wǎng)路郵件產(chǎn)品在內(nèi)的許多產(chǎn)品的領(lǐng)頭羊。但是,2005年初,許多事件使得Ajax被大眾所接受。Google在它著名的交互應(yīng)用程序中使用了非同步通訊,如Google討論組、Google地圖、Google搜索建議、Gmail等。Ajax這個(gè)詞由《Ajax: A New Approach to Web Applications》一文所創(chuàng),該文的迅速流傳提高了人們使用該項(xiàng)技術(shù)的意識(shí)。另外,對(duì)Mozilla/Gecko的支持使得該技術(shù)走向成熟,變得更為易用。
[編輯]優(yōu)點(diǎn)、前提和批評(píng)
使用Ajax的最大優(yōu)點(diǎn)就是能在不更新整個(gè)頁(yè)面的前提下維護(hù)數(shù)據(jù)。這使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶交互,並避免了在網(wǎng)路上發(fā)送那些沒(méi)有改變的信息。
Ajax不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執(zhí)行。就像DHTML應(yīng)用程序那樣,Ajax應(yīng)用程序必須在眾多不同的瀏覽器和平臺(tái)上經(jīng)過(guò)嚴(yán)格的測(cè)試。隨著Ajax的成熟,一些簡(jiǎn)化Ajax使用方法的程序庫(kù)也相繼問(wèn)世。同樣,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù),為那些不支持JavaScript的用戶提供替代功能。
對(duì)應(yīng)用Ajax最主要的批評(píng)就是,它可能破壞瀏覽器後退按鈕的正常行為(參見(jiàn)Jakob Nielsen's的《1999年Web設(shè)計(jì)新錯(cuò)誤前10名》)。在動(dòng)態(tài)更新頁(yè)面的情況下,用戶無(wú)法回到前一個(gè)頁(yè)面狀態(tài),因?yàn)闉g覽器僅能記憶歷史記錄中的靜態(tài)頁(yè)面。一個(gè)被完整讀入的頁(yè)面與一個(gè)已經(jīng)被動(dòng)態(tài)修改過(guò)的頁(yè)面之間的差別非常微妙;用戶通常會(huì)希望單擊後退按鈕能夠取消他們的前一次操作,但是在Ajax應(yīng)用程序中,這將無(wú)法實(shí)現(xiàn)。開(kāi)發(fā)者們想出了種種辦法來(lái)解決這個(gè)問(wèn)題,大多數(shù)都是在用戶單擊後退按鈕訪問(wèn)歷史記錄時(shí),通過(guò)創(chuàng)建或使用一個(gè)隱藏的IFRAME來(lái)重現(xiàn)頁(yè)面上的變更。(例如,當(dāng)用戶在Google Maps中單擊後退時(shí),它在一個(gè)隱藏的IFRAME中進(jìn)行搜索,然後將搜索結(jié)果反映到Ajax元素上,以便將應(yīng)用程序狀態(tài)恢復(fù)到當(dāng)時(shí)的狀態(tài)。)
一個(gè)相關(guān)的觀點(diǎn)認(rèn)為,使用動(dòng)態(tài)頁(yè)面更新使得用戶難於將某個(gè)特定的狀態(tài)保存到收藏夾中。該問(wèn)題的解決方案也已出現(xiàn),大部分都使用URL片斷標(biāo)識(shí)符(通常被稱為錨點(diǎn),即URL中#後面的部分)來(lái)保持跟蹤,允許用戶回到指定的某個(gè)應(yīng)用程序狀態(tài)。(許多瀏覽器允許JavaScript動(dòng)態(tài)更新錨點(diǎn),這使得Ajax應(yīng)用程序能夠在更新顯示內(nèi)容的同時(shí)更新錨點(diǎn)。)這些解決方案也同時(shí)解決了許多關(guān)於不支持後退按鈕的爭(zhēng)論。
進(jìn)行Ajax開(kāi)發(fā)時(shí),網(wǎng)路延遲——即用戶發(fā)出請(qǐng)求到伺服器發(fā)出響應(yīng)之間的間隔——需要慎重考慮。不給予用戶明確的回應(yīng)[3],沒(méi)有恰當(dāng)?shù)念A(yù)讀數(shù)據(jù)[4],或者對(duì)XMLHttpRequest的不恰當(dāng)處理[5],都會(huì)使用戶感到延遲,這是用戶不希望看到的,也是他們無(wú)法理解的。[6]通常的解決方案是,使用一個(gè)可視化的組件來(lái)告訴用戶系統(tǒng)正在進(jìn)行後臺(tái)操作並且正在讀取數(shù)據(jù)和內(nèi)容。
[編輯]開(kāi)發(fā)Ajax應(yīng)用面臨的挑戰(zhàn)及解決方案
對(duì)程序員而言,開(kāi)發(fā)Ajax應(yīng)用最頭痛的問(wèn)題莫過(guò)於以下幾點(diǎn):
- 將業(yè)務(wù)邏輯及表現(xiàn)層放在瀏覽器,數(shù)據(jù)層放在伺服器:因?yàn)樗械某淌揭訨avaScript執(zhí)行在客戶端,只有需要數(shù)據(jù)時(shí)才向伺服器要求服務(wù),此法又稱為胖客戶端(fat client)架構(gòu)。伺服器在此架構(gòu)下通常僅用於提供及儲(chǔ)存數(shù)據(jù)。此法的好處在於程序員可以充分利用JavaScript搭配業(yè)務(wù)邏輯來(lái)做出特殊的使用者介面,以符合終端使用者的要求。但是問(wèn)題也不少,主因在第一,JavaScript語(yǔ)言本身之能力可能不足以處理複雜的業(yè)務(wù)邏輯。第二,JavaScript的執(zhí)行效能一向不好。第三,JavaScript存取伺服器數(shù)據(jù),仍需適當(dāng)?shù)乃欧鞫顺绦蛑浜稀5谒?#xff0c;瀏覽器相容性的問(wèn)題又出現(xiàn)。有些Ajax開(kāi)發(fā)框架如DWR企圖以自動(dòng)生成JavaScript之方式來(lái)避免相容的問(wèn)題,並開(kāi)立通道使得JavaScript可以直接叫用伺服器端的Java程序來(lái)簡(jiǎn)化數(shù)據(jù)的存取。但是前述第一及第二兩個(gè)問(wèn)題仍然存在,程序員必須費(fèi)相當(dāng)?shù)牧獠拍苓_(dá)到應(yīng)用程序之規(guī)格要求,或可能根本無(wú)法達(dá)到要求。
- 將表現(xiàn)層、業(yè)務(wù)邏輯、及數(shù)據(jù)層放在伺服器,瀏覽器僅有使用者介面引擎(User Interface engine);此法又稱為瘦客戶端(thin client)架構(gòu),或中心伺服器(server-centric)架構(gòu)。瀏覽器的使用者介面引擎僅用於反映伺服器的表現(xiàn)層以及傳達(dá)使用者的輸入回到伺服器的表現(xiàn)層。由瀏覽器所觸發(fā)之事件亦送回伺服器處理,根據(jù)業(yè)務(wù)邏輯來(lái)更新表現(xiàn)層,然後反映回瀏覽器。因?yàn)樗袘?yīng)用程序完全在伺服器執(zhí)行,數(shù)據(jù)及表現(xiàn)層皆可直接存取,程序員只需使用伺服器端相對(duì)較成熟之程序語(yǔ)言(如Java語(yǔ)言)即可,不需再學(xué)習(xí)JavaScript/DOM/CSS,在開(kāi)發(fā)應(yīng)用程序時(shí)相對(duì)容易。缺點(diǎn)在於使用者介面引擎以及表現(xiàn)層通常以標(biāo)準(zhǔn)組件的形式存在,如需要特殊組件(使用者介面)時(shí),往往須待原框架之開(kāi)發(fā)者提供,緩不濟(jì)急。如開(kāi)源碼Ajax開(kāi)發(fā)框架ZK目前支援XUL及XHTML組件,尚無(wú)XAML之支援。
總結(jié)
以上是生活随笔為你收集整理的什么是 AJAX, what is AJAX(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2016matlab安装
- 下一篇: pc样式在ie8中的bug