天天看點

初步了解Ajax技術

什麼是Ajax?

AJAX = 異步 JavaScript 和 XML。

AJAX 是一種用于建立快速動态網頁的技術。

通過在背景與伺服器進行少量資料交換,AJAX 可以使網頁實作異步更新。這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。

傳統的網頁(不使用 AJAX)如果需要更新内容,必需重載整個網頁面。

有很多使用 AJAX 的應用程式案例:新浪微網誌、Google 地圖、開心網等等。

在 2005 年,Google 通過其 Google Suggest 使 AJAX 變得流行起來。

Ajax所包含的技術 :

ajax并非一種新的技術,而是幾種原有技術的結合體。它由下列技術組合而成。

1.   使用CSS和XHTML來表示。

2.   使用DOM模型來互動和動态顯示。

3.   使用XMLHttpRequest來和伺服器進行異步通信。

4.  使用javascript來綁定和調用。

在上面幾中技術中,除了XmlHttpRequest對象以外,其它所有的技術都是基于web标準并且已經得到了廣泛使用的,XMLHttpRequest雖然目前還沒有被W3C所采納,但是它已經是一個事實的标準,因為目前幾乎所有的主流浏覽器都支援它。

Ajax原理和XmlHttpRequest對象:

Ajax的原理簡單來說通過XmlHttpRequest對象來向伺服器發異步請求,從伺服器獲得資料,然後用javascript來操作DOM而更新頁面。這其中最關鍵的一步就是從伺服器獲得請求資料。要清楚這個過程和原理,我們必須對 XMLHttpRequest有所了解。

XMLHttpRequest是ajax的核心機制,它是在IE5中首先引入的,是一種支援異步請求的技術。簡單的說,也就是javascript可以及時向伺服器提出請求和處理響應,而不阻塞使用者。達到無重新整理的效果。

是以我們先從XMLHttpRequest講起,來看看它的工作原理。

首先,我們先來看看XMLHttpRequest這個對象的屬性。

它的屬性有:

.     onreadystatechange 每次狀态改變所觸發事件的事件處理程式。

.     responseText 從伺服器程序傳回資料的字元串形式。

.     responseXML 從伺服器程序傳回的DOM相容的文檔資料對象。

.     status 從伺服器傳回的數字代碼,比如常見的404(未找到)和200(已就緒)

.     status Text 伴随狀态碼的字元串資訊

.     readyState 對象狀态值

0.   (未初始化) 對象已建立,但是尚未初始化(尚未調用open方法)

1.   (初始化) 對象已建立,尚未調用send方法

2.   (發送資料) send方法已調用,但是目前的狀态及http頭未知

3.   (資料傳送中) 已接收部分資料,因為響應及http頭不全,這時通過responseBody和responseText擷取部分資料會出現錯誤,

4.   (完成) 資料接收完畢,此時可以通過通過responseXml和responseText擷取完整的回應資料。

ajax的優點 :

Ajax的給我們帶來的好處大家基本上都深有體會,在這裡我隻簡單的講幾點:

1、最大的一點是頁面無重新整理,在頁面内與伺服器通信,給使用者的體驗非常好。

  2、使用異步方式與伺服器通信,不需要打斷使用者的操作,具有更加迅速的響應能力。

  3、可以把以前一些伺服器負擔的工作轉嫁到用戶端,利用用戶端閑置的能力來處理,減輕伺服器和帶寬的負擔,節約空間和寬帶租用成本。并且減輕伺服器的負擔,ajax的原則是“按需取資料”,可以最大程度的減少備援請求,和響應對伺服器造成的負擔。

4、基于标準化的并被廣泛支援的技術,不需要下載下傳插件或者小程式。

AJAX的缺點:

. 下面所闡述的ajax的缺陷都是它先天所産生的。

1、ajax幹掉了back按鈕,即對浏覽器後退機制的破壞。後退按鈕是一個标準的web站點的重要功能,但是它沒法和js進行很好的合作。這是ajax所帶來的一個比較嚴重的問題,因為使用者往往是希望能夠通過後退來取消前一次操作的。那麼對于這個問題有沒有辦法?答案是肯定的,用過Gmail的知道,Gmail下面采用的ajax技術解決了這個問題,在Gmail下面是可以後退的,但是,它也并不能改變ajax的機制,它隻是采用的一個比較笨但是有效的辦法,即使用者單擊後退按鈕通路曆史記錄時,通過建立或使用一個隐藏的IFRAME來重制頁面上的變更。(例如,當使用者在Google Maps中單擊後退時,它在一個隐藏的IFRAME中進行搜尋,然後将搜尋結果反映到Ajax元素上,以便将應用程式狀态恢複到當時的狀态。)

但是,雖然說這個問題是可以解決的,但是它所帶來的開發成本是非常高的,和ajax架構所要求的快速開發是相背離的。這是ajax所帶來的一個非常嚴重的問題。

2、安全問題

技術同時也對IT企業帶來了新的安全威脅,ajax技術就如同對企業資料建立了一個直接通道。這使得開發者在不經意間會暴露比以前更多的資料和伺服器邏輯。ajax的邏輯可以對用戶端的安全掃描技術隐藏起來,允許黑客從遠端伺服器上建立新的攻擊。還有ajax也難以避免一些已知的安全弱點,諸如跨站點腳步攻擊、SQL注入攻擊和基于credentials的安全漏洞等。

3、對搜尋引擎的支援比較弱。

4、破壞了程式的異常機制。至少從目前看來,像ajax.dll,ajaxpro.dll這些ajax架構是會破壞程式的異常機制的。關于這個問題,我曾經在開發過程中遇到過,但是查了一下網上幾乎沒有相關的介紹。後來我自己做了一次試驗,分别采用ajax和傳統的form送出的模式來删除一條資料……給我們的調試帶來了很大的困難。

5、另外,像其他方面的一些問題,比如說違背了url和資源定位的初衷。例如,我給你一個url位址,如果采用了ajax技術,也許你在該url位址下面看到的和我在這個url位址下看到的内容是不同的。這個和資源定位的初衷是相背離的。

6、一些手持裝置(如手機、PDA等)現在還不能很好的支援ajax,比如說我們在手機的浏覽器上打開采用ajax技術的網站時,它目前是不支援的,當然,這個問題和我們沒太多關系。

繼續閱讀