1. 程式人生 > >AJAX 概念 優勢 發展前景 工作原理 底層技術 狀態 缺點 框架

AJAX 概念 優勢 發展前景 工作原理 底層技術 狀態 缺點 框架

新頁面 事件處理程序 而已 更多 從服務器 frame end 事件 搜索

1. 概念

Ajax asynchronous JavaScript and XML , 異步js和xml.

這種解釋已經過時了, 現在ajax就是, 允許瀏覽器和服務器通信, 而無需刷新當前頁面的技術.

它本來是微軟的技術, 是Google 在 google earth、google suggest以及gmail等對ajax技術的廣泛應用,催生了ajax的流行。事實上google目前在ajax技術方面的領先是微軟所無法達到的

2. 發展前景

Gmail在收發郵件的時候已經和Outlook Express的功能幾乎沒有差別了,而且它不需要安裝客戶端程序。現有的瀏覽器還沒有一個能像PhotoShop等桌面程序那樣處理復雜的圖像。但是我們也不能忽視它帶來的影響和沖擊。

3. 優勢(提升用戶體驗)

用戶體驗打比方,如果現在你家裏所在的小區因 某種情況而面臨停水,現在有關部門公布了兩種方案,一是完全停水8個小時,在這8個小時內完全停水,8個小時後恢復正常。二是不完全停水10 個小時,在這10個小時內水沒有完全斷,只是流量比原來小了很多,在10個小時後恢復正常流量,那麽,如果是你你會選擇哪種方式呢?顯然是後者。

異步傳輸是面向字符的傳輸,它的單位是字符;而同步傳輸是面向比特的傳輸,它的單位是楨,它傳輸的時候要求接受方和發送方的時鐘是保持一致的。

異步一般每個小組是一個8位字符,在每個小組的頭部和尾部都有一個開始位和一個停止位,它在傳送過程中接收方和發送方的時鐘不要求一致,也就是說,異步發送方可以在任何時刻發送這些小組,而接收方並不知道它什麽時候到達。

每次異步傳輸的信息都以一個起始位開頭,它通知接收方數據已經到達了,這就給了接收方響應、接收 和緩存數據比特的時間;在傳輸結束時,一個停止位表示該次傳輸信息的終止。停止位使信號重新變回1,該信號一直保持到下一個開始位到達。

同步傳輸的比特分組要大得多。它不是獨立地發送每個字符,每個字符都有自己的開始位和停止位,而是把它們組合起來一起發送。我們將這些組合稱為數據幀,或簡稱為幀。確保接收方的采樣速度和比特的到達速度保持一致,使收發雙方進入同步。

同步也有好處:同步傳輸通常要比異步傳輸快速得多。接收方不必對每個字符進行開始和停止的操作。一旦檢測到幀同步字符,它就在接下來的數據到達時接收它們。另外,同步傳輸的開銷也比較少。

缺點:數據比特位越長,緩存數據所需要的緩沖區也越大,這就限制了一個幀的大小。另外,幀越大,它占據傳輸媒體的連續時間也越長。在極端的情況下,這將導致其他用戶等得太久。


4. 工作原理及賴以工作的底層技術

通過XmlHttpRequest對象來向服務器發異步請求,從服務器獲得數據,然後用javascript來操作DOM而更新頁面。

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獲取完整的回應數據

5.缺點

ajax的缺點

  下面我著重講一講ajax的缺陷,因為平時我們大多註意的都是ajax給我們所帶來的好處諸如用戶體驗的提升。而對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技術的網站時,它目前是不支持的,當然,這個問題和我們沒太多關系。

6.ajax的幾種框架

目前我們采用的比較多的ajax框架主要有ajax.dll,ajaxpro.dll,magicajax.dll 以及微軟的atlas框架。Ajax.dll和Ajaxpro.dll這兩個框架差別不大,而magicajax.dll只是封裝得更厲害一些,比如說它可以直接返回DataSet數據集,前面我們已經說過,ajax返回的都是字符串,magicajax只是對它進行了封裝而已。但是它的這個特點可以給我們帶來很大的方便,比如說我們的頁面有一個列表,而列表的數據是不斷變化的,那麽我們可以采用magicajax來處理,操作很簡單,添加magicajax之後,將要更新的列表控件放在magicajax的控件之內,然後在pageload裏面定義更新間隔的時間就ok了,atlas的原理和magicajax差不多。但是,需要註意的一個問題是,這幾種框架都只支持IE,沒有進行瀏覽器兼容方面的處理,用反編譯工具察看他們的代碼就可以知道。

除了這幾種框架之外,我們平時用到的比較多的方式是自己創建xmlHttpRequest對象,這種方式和前面的幾種框架相比更具有靈活性。另外,在這裏還提一下aspnet2.0自帶的異步回調接口,它和ajax一樣也可以實現局部的無刷新,但它的實現實際上也是基於xmlhttprequest對象的,另外也是只支持IE,當然這是微軟的一個競爭策略。

AJAX 概念 優勢 發展前景 工作原理 底層技術 狀態 缺點 框架