首先,Ajax是什么?一個(gè)很酷的新興詞匯!僅僅是某種早就有了的技術(shù)的一種新說法而已! Ajax是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。要談到網(wǎng)頁應(yīng)用程序,則必須從WEB的歷史來講:
1.開始的Internet,僅僅是科學(xué)家們用來交換研究論文,及一些大學(xué)在上面發(fā)布一些課程信息的工具,那個(gè)時(shí)候網(wǎng)頁與一幅戶外廣告沒多大區(qū)別(相反戶外廣告才能起來廣告的作用).那個(gè)時(shí)候,只有少部分的公司具有公司網(wǎng)站,而它們的公司網(wǎng)站僅僅是在首頁上放置一些聯(lián)系信息或一些靜態(tài)的文檔!
2.當(dāng)Windows出現(xiàn)后(盡管Windows僅僅是給早就有了的操作系統(tǒng)加個(gè)外套而已,但這確實(shí)上一大進(jìn)步),及個(gè)人電腦的流行,WEB也開始從學(xué)院走向群眾,人們無法再忍受靜態(tài)網(wǎng)頁的一成不變,于是CGI(Common Gateway Interface)誕生了! CGI其實(shí)是用C或Perl編寫的程序,當(dāng)用戶請(qǐng)求某個(gè)頁面時(shí),CGI程序會(huì)自動(dòng)執(zhí)行,CGI程序可以訪問數(shù)據(jù)庫,返回HTML頁面.那個(gè)時(shí)候就可以通過CGI來創(chuàng)建一個(gè)在線商城了.然而CGI有很多缺點(diǎn):首先是其編寫很復(fù)雜,往往編寫CGI的是一些專業(yè)的程序員,他們只會(huì)關(guān)心一些算法問題,而不會(huì)理HTML頁面是否漂亮! 另一點(diǎn),由于CGI是經(jīng)過編譯后的程序,雖然作為獨(dú)立程序運(yùn)行時(shí)效率會(huì)很高,但也很危險(xiǎn),因?yàn)镃GI程序可以訪問服務(wù)器的系統(tǒng)里的其它與WEB無關(guān)的程序及創(chuàng)建文件,雖然一般情況下CGI程序不會(huì)這樣做,但如果惡意用戶將CGI程序放到服務(wù)器,那么它就可以為所欲為了!盡管存在這些缺陷,到如今CGI仍在使用。
3.很多人都知道Sun,知道因特網(wǎng)流行的編程語言JAVA.如上所說CGI具有許多缺點(diǎn),JAVA便是來彌補(bǔ)這些缺點(diǎn)的.由于Netscape的Navigator支持Java,動(dòng)態(tài)Web頁面掀開了新的一頁:applet時(shí)代到來了。Applet與CGI不同,它是運(yùn)行在客戶端的,Applet就是嵌入在Web頁面上的小應(yīng)用程序. 只要用戶使用支持Java的瀏覽器,就可以在瀏覽器的Java虛擬機(jī)(Java Virtual Machine,JVM)中運(yùn)行applet。盡管applet可以做很多事情,但它也存在一些限制:通常不允許它讀寫文件系統(tǒng),它也不能加載本地庫,而且可能無法啟動(dòng)客戶端上的程序。除了這些限制外,applet是在一個(gè)沙箱安全模型中運(yùn)行的,這是為了有助于防止用戶運(yùn)行惡意代碼。 JAVA最先就是因?yàn)锳pplet出名的,而很多人學(xué)JAVA也是從Applet開始的.然而,Applet好景不長,一是由于一個(gè)Applet本身加載要很長時(shí)間,另一方面,由于更流行的MS的IE開始不支持Applet,它就只好沒落了.
4.與此同時(shí),Netscape創(chuàng)建了一種腳本語言,并最終命名為JavaScript(建立原型時(shí)叫做Mocha,正式發(fā)布之前曾經(jīng)改名為LiveWire和LiveScript,不過最后終于確定為JavaScript)。設(shè)計(jì)JavaScript是為了讓不太熟悉Java的Web設(shè)計(jì)人員和程序員能夠更輕松地開發(fā)applet(當(dāng)然,Microsoft也推出了與JavaScript相對(duì)應(yīng)的腳本語言,稱為VBScript)。 當(dāng)然,最初JavaScript是很失敗的,由于各個(gè)瀏覽器相互不兼容(然而它們都提供了彈窗,那些煩人的alert),又因?yàn)槿狈﹂_發(fā)工具,JavaScript很受非議.但盡管如此,JavaScript仍然是一種創(chuàng)建動(dòng)態(tài)Web應(yīng)用的強(qiáng)大方法。
5.在Java問世一年左右,Sun引入了servlet?,F(xiàn)在Java代碼不用再像applet那樣在客戶端瀏覽器中運(yùn)行了,它可以在你控制的一個(gè)應(yīng)用服務(wù)器上運(yùn)行。這樣,開發(fā)人員就能充分利用現(xiàn)有的業(yè)務(wù)應(yīng)用,而且,如果需要升級(jí)為最新的Java版本,只需要考慮服務(wù)器就行了。Java推崇“一次編寫,到處運(yùn)行”,這一點(diǎn)使得開發(fā)人員可以選擇最先進(jìn)的應(yīng)用服務(wù)器和服務(wù)器環(huán)境,這也是這種新技術(shù)的另一個(gè)優(yōu)點(diǎn)。servlet還可以取代CGI腳本。 當(dāng)然,這個(gè)時(shí)候的servlet仍然比CGI簡單不了多少.MS吸取了Sun的教訓(xùn),推出了ASP,Sun也很快作出了回應(yīng),推出了JSP.JSP和ASP的設(shè)計(jì)目的都是為了將業(yè)務(wù)處理與頁面外觀相分離,從這個(gè)意義上講,二者是相似的。雖然存在一些技術(shù)上的差別(Sun也從Microsoft那里學(xué)到了教訓(xùn)),但它們有一個(gè)最大的共同點(diǎn),即Web設(shè)計(jì)人員能夠?qū)P脑O(shè)計(jì)頁面外觀,而軟件開發(fā)人員可以專心開發(fā)業(yè)務(wù)邏輯。 ASP與JSP都沒有壟斷服務(wù)器腳本市場,因?yàn)檫€有其它優(yōu)秀的服務(wù)器腳本,如PHP,ColdFusion及Ruby!
6.當(dāng)WEB進(jìn)化到這里的時(shí)候,動(dòng)態(tài)的網(wǎng)站已經(jīng)很多了.但人們對(duì)動(dòng)態(tài)的定義一直很模糊,比如說很多人以為動(dòng)態(tài)是指動(dòng)畫!其實(shí)這也沒什么可笑的,正是這一理念,將動(dòng)態(tài)WEB從服務(wù)器端動(dòng)態(tài)生成HTML進(jìn)化為富客戶端應(yīng)用程序(當(dāng)然不是動(dòng)畫). 富客戶端應(yīng)用程序(Rich Internet Applications,富因特網(wǎng)應(yīng)用程序,RIA)的提出解決了長久以來的"客戶體驗(yàn)"問題,用戶在使用Windows時(shí)已經(jīng)習(xí)慣于那些各色各樣的桌面應(yīng)用程序,而死板的HTML頁面往往只能提供一些文檔. RIA的出現(xiàn),目標(biāo)就是能使WEB頁面能像桌面應(yīng)用程序一樣具有很高的交互性及響應(yīng)率.其實(shí)Sun推出的Applet就是一個(gè)RIA,當(dāng)然MS也有其產(chǎn)品,最近推出的SilverLight.并不只有這兩家,還有Adobe Flash(它不是做動(dòng)畫的嗎?對(duì)的,但其不但可以用來做動(dòng)畫,還可以創(chuàng)建一些其它的RIA),利用Flash,設(shè)計(jì)人員可以創(chuàng)建令人驚嘆的動(dòng)態(tài)應(yīng)用。公司可以在Web上發(fā)布高度交互性的應(yīng)用,幾乎與胖客戶應(yīng)用相差無幾。不同于applet、servlet和CGI腳本,F(xiàn)lash不需要編程技巧,很容易上手。 像許多解決方案一樣,F(xiàn)lash需要客戶端軟件,由于此限制,很多網(wǎng)站上就多出了"跳過此頁"的鏈接.
7.主角出場了(其實(shí)已經(jīng)低調(diào)出場過一次了),曾經(jīng)的JavaScript,以及其帶來的DHTML,開始了新的歷程. 當(dāng)Microsoft和Netscape發(fā)布其各自瀏覽器的第4版時(shí),Web開發(fā)人員有了一個(gè)新的選擇:動(dòng)態(tài)HTML(Dynamic HTML,DHTML)。與有些人想像的不同DHTML不是一個(gè)W3C標(biāo)準(zhǔn),它更像是一種營銷手段。實(shí)際上,DHTML結(jié)合了HTML、層疊樣式表(Cascading Style Sheets,CSS)、JavaScript和DOM。這些技術(shù)的結(jié)合使得開發(fā)人員可以動(dòng)態(tài)地修改Web頁面的內(nèi)容和結(jié)構(gòu)。 最初DHTML的反響很好。不過,它需要的瀏覽器版本還沒有得到廣泛采用。盡管IE和Netscape都支持DHTML,但是它們的實(shí)現(xiàn)大相徑庭,這要求開發(fā)人員必須知道他們的客戶使用什么瀏覽器。而這通常意味著需要大量代碼來檢查瀏覽器的類型和版本,這就進(jìn)一步增加了開發(fā)的開銷。有些人對(duì)于嘗試這種方法很是遲疑,因?yàn)镈HTML還沒有一個(gè)官方的標(biāo)準(zhǔn)。 當(dāng)DHTML漸漸退出視野之后,我們的JavaScript并沒有沒落,由于W3C標(biāo)準(zhǔn)的不斷推進(jìn),給JS帶來了福音,現(xiàn)在編寫跨瀏覽器的代碼并不像當(dāng)初那樣困難了(盡管也存在一些問題).另外,XML與異步通信(XMLHttpRequest)在WEB上的的流行,瀏覽器對(duì)支持也越來越好,也使得JS可以大展其身手.當(dāng)你使用JS操縱DOM的時(shí)候,就發(fā)現(xiàn)實(shí)現(xiàn)動(dòng)態(tài)WEB應(yīng)用程序已經(jīng)不再有多遙遠(yuǎn). 現(xiàn)在又有了XML(數(shù)據(jù)庫)與異步通信的支持,可以使得應(yīng)用程序在加載完成后,無需跳轉(zhuǎn),就可以返回給用戶所有的內(nèi)容了!
Ajax是Asynchronous JavaScript and XML(異步JavaScript和XML),它其實(shí)包含了很多技術(shù),主要是下面所列的:
XMLHttpRequest對(duì)象其實(shí)最早是由MS提出來的,并在IE5中就提供了支持,當(dāng)時(shí),在IE5里它是一個(gè)ActiveXObject. 原先,XHR對(duì)象只在IE中得到支持(因此限制了它的使用),但是從Mozilla 1.0和Safari 1.2開始,對(duì)XHR對(duì)象的支持開始普及。這個(gè)很少使用的對(duì)象和相關(guān)的基本概念甚至已經(jīng)出現(xiàn)在W3C標(biāo)準(zhǔn)中:DOM Level 3 加載和保存規(guī)約(DOM Level 3 Load and Save Specification)?,F(xiàn)在,特別是隨著Google Maps、Google Suggest、Gmail、Flickr、Netflix和A9等應(yīng)用變得越來越炙手可熱,XHR也已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。 與前面提到的方法不同,Ajax在大多數(shù)現(xiàn)代瀏覽器中都能使用,而且不需要任何專門的軟件或硬件。實(shí)際上,這種方法的一大優(yōu)勢就是開發(fā)人員不需要學(xué)習(xí)一種新的語言,也不必完全丟掉他們原先掌握的服務(wù)器端技術(shù)。Ajax是一種客戶端方法,可以與J2EE、.NET、PHP、Ruby和CGI腳本交互,它并不關(guān)心服務(wù)器是什么。盡管存在一些很小的安全限制,你還是可以現(xiàn)在就開始使用Ajax,而且能充分利用你原有的知識(shí)。
雖然可以使用XHR對(duì)象來實(shí)現(xiàn)異步通信,但其實(shí)早期的開發(fā)人員曾經(jīng)也嘗試過使用隱藏幀等方法來實(shí)現(xiàn)異步通信!
//主頁面中的JS代碼 function getPages(url) { var iframe =document.getElementById("hideIframe");//一個(gè)隱藏了的iframe標(biāo)簽 iframe.src = url;//將幀的src設(shè)置為傳入的url,就可以將那個(gè)頁面在后臺(tái)載入 } window.container = document.getElementById("oDiv");//加載內(nèi)容的窗口 getPages("test.php?param=value");//可以通過QS傳遞參數(shù) //在隱藏幀中加載的頁面中JS代碼 window.onload = function () {//當(dāng)幀加載完畢后修改父窗口中的內(nèi)容 parent.container.innerHTML = document.body.innerHTML; }
另外還有一種就是使用script標(biāo)簽
//HTML <script type="text/javascript" id="voidScript" src="void(0)"> </script> //JS function getScript(url) { var script = document.getElementById("voidScript"); script.src =url;//這種方法必須加載JS腳本,并且腳本加載后就會(huì)執(zhí)行 } getScript("test.php?userName=abc");
Ajax并不是每個(gè)網(wǎng)站都需要的,盡管它有諸多優(yōu)點(diǎn):如可與XHTML無縫集成,輕量,無需插件..但其缺點(diǎn)也有不少:依賴JavaScript,影響瀏覽器默認(rèn)行為如后退按鈕及收藏夾等.另外,它最大的優(yōu)點(diǎn)也是它最大的缺點(diǎn): 我們以前總是告訴用戶,Web應(yīng)用是以一種請(qǐng)求/響應(yīng)模式完成操作的,用戶也已經(jīng)接受了這種思想。但是用了Ajax,就不再有這個(gè)限制。我們可以只修改頁面的一部分,如果用戶沒想到這一點(diǎn),他們會(huì)嘗試狂點(diǎn)某按鈕,或刷新頁面,所以要通過一些方法來讓用戶知道頁面正在"異步"與服務(wù)器交互!
聯(lián)系客服