一篇文章總結Ajax技術

特別說明:以下文章是菜鳥教程的Ajax教程以及一些其他網上公開資料的學習總結,部分文字直接copy自原文,也有一些文章的引用引用,均標明出處,如涉及侵權請聯繫刪除。



1. 什麼是Ajax

關於Ajax的發明來源略過不提,這些屬於技術裏的冷知識,感興趣的同學自己搜索。

AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)

Ajax不是一門新語言,它是基於現有Internet標準基礎上,提出的一種優化客戶端顯示的技術方案。Ajax基於Javascript語言實現,終端用戶想要使用此方案,需要允許瀏覽器執行Javascript腳本。


2. Ajax解決什麼問題

與傳統的網頁訪問與生成方法相比,Ajax可以實現:

  • 快速生成動態網頁內容
  • 與服務器數據交換更少
  • 不刷新全部網頁而只是部分更新網頁上內容

2.1 與傳統網頁訪問的不同

傳統動態網頁訪問,由瀏覽器發送請求(httprequest)到服務器,服務器收到請求後生成整張網頁內容再發送給瀏覽器,瀏覽器收到後顯示出來。如果網頁上有動態更新內容,例如輸入框輸入查詢字符,點擊某個按鍵等等,瀏覽器在用戶操作後,需要把用戶輸入數據再次放入請求(httprequest)發送給服務器,服務器重複上述過程重新生成新的頁面返回給瀏覽器顯示。

從上面過程可以發現,頁面上任何動態輸入操作,瀏覽器都要刷新整張頁面,如果頁面內容很多,或者網絡速度很慢,或者服務器由於任務過多響應不及時,就會造成瀏覽器一直等待服務器的頁面返回,即常見的瀏覽器“白屏”,用戶體驗很差。

Ajax的頁面訪問方式不同,第一次瀏覽器請求時返回的仍然是全部頁面,之後頁面上的動態操作,是由特殊的請求(xmlhttprequest)完成,服務器側對應由專門的Javascript代碼響應此請求,返回對應的數據,瀏覽器收到後,在原頁面基礎上,用新數據部分更新頁面,因此可以實現快速的動態頁面生成。

下面的三張圖對這兩種方式做了一個比較好的總結(圖片來源在此,這位網友的文章總結不錯,希望瞭解更多圖片細節的可以閱讀其文章)。

  • 從瀏覽器端看差異
  • 從服務器端看差異
  • 從頁面編寫上看差異

2.2 與httprequest報頭的對比1

  • xmlhttprequest
  • httprequest

區別主要在於

  • Ajax請求多了一個X-Requested-With:XMLHttpRequest 屬性。
    該屬性是方便服務器端判斷get請求來自Ajax請求還是傳統請求。

  • Ajax的get請求Accept屬性爲application/json,text/javascript
    該屬性是期待服務器返回的數據格式。


3. Ajax的優缺點

3.1 優點2

  • 無刷新更新數據
    AJAX最大優點就是能在不刷新整個頁面的前提下與服務器通信維護數據。這使得Web應用程序更爲迅捷地響應用戶交互,並避免了在網絡上發送那些沒有改變的信息,減少用戶等待時間,帶來非常好的用戶體驗。
  • 異步與服務器通信
    AJAX使用異步方式與服務器通信,不需要打斷用戶的操作,具有更加迅速的響應能力。優化了Browser和Server之間的溝通,減少不必要的數據傳輸、時間及降低網絡上數據流量。
  • 前端和後端負載平衡
    AJAX可以把以前一些服務器負擔的工作轉嫁到客戶端,利用客戶端閒置的能力來處理,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本。並且減輕服務器的負擔,AJAX的原則是“按需取數據”,可以最大程度的減少冗餘請求和響應對服務器造成的負擔,提升站點性能。
  • 基於標準被廣泛支持
    AJAX 基於標準化的並被廣泛支持的技術,不需要下載瀏覽器插件或者小程序,但需要客戶允許JavaScript在瀏覽器上執行。隨着Ajax的成熟,一些簡化 Ajax使用方法的程序庫也相繼問世。同樣,也出現了另一種輔助程序設計的技術,爲那些不支持JavaScript的用戶提供替代功能。
  • 界面與應用分離
    Ajax使WEB中的界面與應用分離(也可以說是數據與呈現分離),有利於分工合作、減少非技術人員對頁面的修改造成的WEB應用程序錯誤、提高效率、也更加適用於現在的發佈系統。

3.2 缺點3 4

  • 瀏覽器不兼容
    AJAX高度依賴JavaScript,而不同的瀏覽器對JavaScript支持性不同。這成了一個問題,尤其是當AJAX必須跨許多瀏覽器工作的時候。那些不支持JavaScript或者不支持JavaScript某些選項的瀏覽器將不能夠正常使用ajax。由於Ajax對JavaScript的依賴性,它不適用移動應用。另外,使用Ajax時,web瀏覽器的後退鍵不能正常使用(沒有刷新新頁面,只是在原頁面上更新,因此沒有後退一說)。
  • 不安全性
    網頁可能很難調試,增加網頁的代碼量,你的網頁更可能遇上嚴峻的安全威脅。
  • 增加Web服務器的負載
    如果你增加一個自動更新的功能,它每隔幾秒向服務發起請求,那麼就會增加服務器的負載。

4. 使用Ajax

(簡化版5,詳細內容參見菜鳥教程的Ajax教程

  1. 創建xmlhttprequest對象
  • 小竅門:
    所有現代瀏覽器(IE7+、Firefox、Chrome、Safari 以及 Opera)均內建XMLHttpRequest 對象,老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 對象。爲了應對所有的現代瀏覽器,包括 IE5 和 IE6,請檢查瀏覽器是否支持 XMLHttpRequest 對象。*
if (window.XMLHttpRequest)
{
    //  IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行代碼
    xmlhttp=new XMLHttpRequest();
}
else
{
    // IE6, IE5 瀏覽器執行代碼
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
  1. 創建HTTP請求
xmlhttp.open("GET","/try/ajax/demo_get.php",true);
  1. 設置響應HTTP請求狀態變化的函數
xmlhttp.onreadystatechange=[function_name]
  1. 發送請求
xmlhttp.send();
  1. 處理服務器響應
function [function_name]()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        // 你的數據處理代碼
        ......
    }
}

5. 總結

以上就是對Ajax的總結,細節不做展開,使用時具體參考相關文章即可。文章內容參考網上資源總結而成,相關鏈接參見文後列表。


  1. ajax get和普通get請求的區別 ↩︎

  2. AJAX工作原理及其優缺點 ↩︎

  3. Pros and Cons of AJAX ↩︎

  4. 淺談Ajax的優缺點 ↩︎

  5. AJAX的實現步驟(完整過程) ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章