淺談我眼中的Ajax_AJAX教程
推薦:Ajax如何實現(xiàn)靜態(tài)頁面分頁靜態(tài)頁面分頁的AJAX實現(xiàn),效果如圖: index.html頁面源文件: html head titleAJAX靜態(tài)分頁/title meta http-equiv=content-type content=text/html;charset=gb2312 style type=text/css !-- body { text-align:center;font:14px Verdana,sans-serif;
AJAX在去年確實火爆了,作為Web2.0時代的核心技術(shù),關(guān)注度盛況空前,至今仍余音未絕,我一直從事于WinForm、Windows Mobile應(yīng)用開發(fā),雖然對Web開發(fā)略知一二,但從未向?qū)W習(xí)WinForm開發(fā)一樣系統(tǒng)的學(xué)過Web,最近閑暇之余從頭學(xué)了學(xué)ASP.NET,到現(xiàn)在才真正理解清楚了諸如ViewState之類的Web工作原理,我可以肯定的說,時下的Web開發(fā)人員中還有什么都沒理解清楚的“高手”,當(dāng)然ASP.NET并不是今天討論的話題,我們直接看看Ajax吧,在理解清楚它之后你會發(fā)現(xiàn),它比理解WinForm編程中的線程單元要簡單得多,就其技術(shù)本身來說并沒有什么神秘與復(fù)雜性可言,而且其工作機制還不及三次握手的理解難度,我們并不討論實現(xiàn)的方法,而只對底層工作原理進行剖析,因此讀這篇文章并不需要造火箭的技術(shù)。Ajax(Asynchronous JavaScript and XML)中文意思為異步JavaScript 和XML,或者基于XML的異步JavaScript.它提供了一種局部刷新Web頁面的機制,比起傳統(tǒng)的整頁Load在性能上有了質(zhì)的飛躍,看看GoogleMap吧,再看看Google輸入框的AutoComplete功能,相信你已經(jīng)對Ajax無限神往了。每一項技術(shù)都有其發(fā)展的根源,我們追溯一下Ajax的歷史,其實這個技術(shù)最早在IE5.0中被引入,算算也是幾年前的東西了,可惜微軟當(dāng)時并沒有挖掘出它的價值,直到Flickr, Backpack和Google在這方面作出了驚人的研究成果。就技術(shù)根本來說,Ajax只完成了一個功能,即用客戶端代碼(JavaScript )發(fā)送Http請求,要完成這一特殊的功能并不是我們這些普通開發(fā)人員能簡單實現(xiàn)的,因為它依賴于瀏覽器本身,在IE5中,微軟引入了一個XmlHttp的ActiveX對象,后來Mozilla, Safari 和其他瀏覽器紛紛仿效, 提供了XMLHttpRequest類,它支持微軟這個ActiveX對象所提供的方法和屬性.這個類使得我們用JavaScript發(fā)送Http請求成為可能。并且它提供了我們插入響應(yīng)代碼的途徑。下面是前面所描述的這個對象執(zhí)行機制的偽代碼:
request = new XMLHttpRequest();
request.open('GET', 'http://localHost/xxxx.aspx, true);
request.send(null);
響應(yīng)這個請求:request.onreadystatechange = function(){
var text = request.ResponseText; //取得響應(yīng)的字符串
// 作出響應(yīng).....執(zhí)行一些客戶端JavaScript
};
當(dāng)然實際代碼比起這些代碼要復(fù)雜得多,但前面說過了,我們并不討論實現(xiàn)方式,而是探尋其執(zhí)行原理,可見為Ajax剝下神秘面紗后赤裸裸的展示出來其簡單的原理,和C#里的事件響應(yīng)一樣,只不過這個事件是客戶端請求而服務(wù)端觸發(fā)罷了,真正的復(fù)雜性早已被微軟封裝到ActiveX對象中了,但是原理的簡單并不是說實現(xiàn)的簡單,實現(xiàn)起來確實有些難度,但是現(xiàn)在那么多的AJAX框架已經(jīng)為我們屏蔽了很底層的東東,實現(xiàn)并不在本文所談?wù)摰脑掝},這里就不詳述了。
任何新技術(shù)的引入伴隨的都是痛苦的學(xué)習(xí),我們必須掌握其實現(xiàn)原理,才能準(zhǔn)確,適宜的用好這些新技術(shù),盲目爛用只能弄巧成拙。那么作為開發(fā)人員的我們?nèi)绾螒?yīng)對已經(jīng)到來的AJAX呢?以下是我個人理解了AJAX后的一些結(jié)論(注:本人自知技術(shù)造詣淺陋,不對之處請大家原諒):
理解Ajax解決的問題
Ajax的出現(xiàn)就是為了改善Web程序用戶體驗,用戶點擊頁面后的頁面刷新延遲問題就是引入Ajax的直接理由,如果我們的程序運用AJAX并沒有改善用戶體驗的話那只是為了Ajax而Ajax,而不是為了用戶體驗而Ajax。
Ajax的弊端
1、兼容性。Ajax的立命之本是前面提到的XMLHttpRequest,然而這個對象在各個瀏覽器中不盡相同,這就增加了我們開發(fā)過程中完成一個跨瀏覽器的通用代碼的難度,而JavaScript這種語言在各種瀏覽器中對技術(shù)的支持和標(biāo)準(zhǔn)也不同,從而加劇了這種困難性。好在市面上紛繁的Ajax框架已經(jīng)為我們解決了兼容性問題,讓我們構(gòu)建跨瀏覽器的程序變得簡單起來。
2、服務(wù)器壓力。本人認為Ajax把客戶端請求服務(wù)器響應(yīng)這一過程變?yōu)楫惒綀?zhí)行,一方面提高了用戶體驗,同時使得用戶請求響應(yīng)的次數(shù)顯著增加,服務(wù)器面臨的壓力也將增強,試想一下,以傳統(tǒng)整頁加載的方式當(dāng)用戶請求一個頁面時候必然會等待頁面裝載,而Ajax使得請求發(fā)出后頁面并不需要等待,這樣用戶可以點擊其他頁面元素再次發(fā)送請求,試想一下Google的AutoComplete功能如果是鏈接數(shù)據(jù)庫請求的話,每次輸入都會發(fā)生這一行為,那數(shù)據(jù)庫壓力是否成倍增長?
3、語言問題。由于Ajax以JavaScript為核心,而這是一種繁雜而又易出錯的語言,它會使得我們將應(yīng)用邏輯任意地散布在服務(wù)端和客戶端中,這使得問題很難被發(fā)現(xiàn)而且代碼很難重用。JavaScript甚至被服務(wù)端開發(fā)人員認為是一種企業(yè)級應(yīng)用不需要使用的東西應(yīng)該盡力避免。幸好出現(xiàn)了Microsoft Script Debugger等強大的JS調(diào)試器,同時VS2008的JavaScript智能功能也在為這些問題而做著努力。然而JavaScript的缺陷如雙重變量賦值(通常是由于缺少數(shù)據(jù)類型)使得調(diào)試程序依然面臨挑戰(zhàn)。
相關(guān)技術(shù)
由于XMLHttpRequest返回的響應(yīng)是以字符串形式出現(xiàn),因此XML成為理想的選擇,Ajax中的x預(yù)示著XML將終身伴隨著Ajax,因為大多數(shù)開發(fā)人員已經(jīng)掌握了這項流行的技術(shù)。對于Xml來說理解Dom是必須的,Xpath為Xml操作提供了捷徑,而XSLT為輸出Html提供了天然的溫床,因此所談到的這些技術(shù)作為Ajax開發(fā)者必須掌握。加上新引入的XMLHttpRequest對象,和更復(fù)雜的JavaScript代碼,相信技術(shù)的學(xué)習(xí)依然會痛苦一段時間。
分享:解析AJAX進度條在最近的一個項目中,有一個上傳功能:上傳一個cvs文件,然后解析此文件并寫入數(shù)據(jù)庫 由于經(jīng)常需要傳很大的文件,客戶完成此功能往往需要40分鐘,在這個過程中,頁面也沒有任何提示,用戶體驗非常不好? 為何不用ajax作一個進度條呢? 分兩步完成此需求: 一
- Ajax中瀏覽器的緩存問題解決方法
- AJAX和WebService實現(xiàn)省市縣三級聯(lián)動具體代碼
- ajax 登錄功能簡單實現(xiàn)(未連接數(shù)據(jù)庫)
- AJAX和WebService實現(xiàn)郵箱驗證(無刷新驗證郵件地址是否合法)
- AJAX和三層架構(gòu)實現(xiàn)分頁功能具體思路及代碼
- 使用AJAX返回WebService里的集合具體實現(xiàn)
- AJAX獲取服務(wù)器當(dāng)前時間及時間格式輸出處理
- ajax傳遞多個參數(shù)具體實現(xiàn)
- ajax傳遞一個參數(shù)具體實現(xiàn)
- 滑輪滾動到頁面底部ajax加載數(shù)據(jù)配合jsonp實現(xiàn)探討
- jQery ajax——load()方法示例介紹
- jQuery+Ajax實現(xiàn)表格數(shù)據(jù)不同列標(biāo)題排序(為表格注入活力)
- 相關(guān)鏈接:
- 教程說明:
AJAX教程-淺談我眼中的Ajax
。