request.open('GET', 'http://localHost/xxxx.aspx, true);
request.send(null);
響應這個請求:request.onreadystatechange = function(){
var text = request.ResponseText; //取得響應的字符串
// 作出響應.....執行一些客戶端JavaScript
};
當然實際代碼比起這些代碼要復雜得多,但前面說過了,我們并不討論實現方式,而是探尋其執行原理,可見為Ajax剝下神秘面紗后赤裸裸的展示出來其簡單的原理,和C#里的事件響應一樣,只不過這個事件是客戶端請求而服務端觸發罷了,真正的復雜性早已被微軟封裝到ActiveX對象中了,但是原理的簡單并不是說實現的簡單,實現起來確實有些難度,但是現在那么多的AJAX框架已經為我們屏蔽了很底層的東東,實現并不在本文所談論的話題,這里就不詳述了。
任何新技術的引入伴隨的都是痛苦的學習,我們必須掌握其實現原理,才能準確,適宜的用好這些新技術,盲目爛用只能弄巧成拙。那么作為開發人員的我們如何應對已經到來的AJAX呢?以下是我個人理解了AJAX后的一些結論(注:本人自知技術造詣淺陋,不對之處請大家原諒):
理解Ajax解決的問題
Ajax的出現就是為了改善Web程序用戶體驗,用戶點擊頁面后的頁面刷新延遲問題就是引入Ajax的直接理由,如果我們的程序運用AJAX并沒有改善用戶體驗的話那只是為了Ajax而Ajax,而不是為了用戶體驗而Ajax。
Ajax的弊端
1、兼容性。Ajax的立命之本是前面提到的XMLHttpRequest,然而這個對象在各個瀏覽器中不盡相同,這就增加了我們開發過程中完成一個跨瀏覽器的通用代碼的難度,而JavaScript這種語言在各種瀏覽器中對技術的支持和標準也不同,從而加劇了這種困難性。好在市面上紛繁的Ajax框架已經為我們解決了兼容性問題,讓我們構建跨瀏覽器的程序變得簡單起來。
2、服務器壓力。本人認為Ajax把客戶端請求服務器響應這一過程變為異步執行,一方面提高了用戶體驗,同時使得用戶請求響應的次數顯著增加,服務器面臨的壓力也將增強,試想一下,以傳統整頁加載的方式當用戶請求一個頁面時候必然會等待頁面裝載,而Ajax使得請求發出后頁面并不需要等待,這樣用戶可以點擊其他頁面元素再次發送請求,試想一下Google的AutoComplete功能如果是鏈接數據庫請求的話,每次輸入都會發生這一行為,那數據庫壓力是否成倍增長?
3、語言問題。由于Ajax以JavaScript為核心,而這是一種繁雜而又易出錯的語言,它會使得我們將應用邏輯任意地散布在服務端和客戶端中,這使得問題很難被發現而且代碼很難重用。JavaScript甚至被服務端開發人員認為是一種企業級應用不需要使用的東西應該盡力避免。幸好出現了Microsoft Script Debugger等強大的JS調試器,同時VS2008的JavaScript智能功能也在為這些問題而做著努力。然而JavaScript的缺陷如雙重變量賦值(通常是由于缺少數據類型)使得調試程序依然面臨挑戰。
相關技術
由于XMLHttpRequest返回的響應是以字符串形式出現,因此XML成為理想的選擇,Ajax中的x預示著XML將終身伴隨著Ajax,因為大多數開發人員已經掌握了這項流行的技術。對于Xml來說理解Dom是必須的,Xpath為Xml操作提供了捷徑,而XSLT為輸出Html提供了天然的溫床,因此所談到的這些技術作為Ajax開發者必須掌握。加上新引入的XMLHttpRequest對象,和更復雜的JavaScript代碼,相信技術的學習依然會痛苦一段時間。
新聞熱點
疑難解答
圖片精選