JavaScript基礎:什么是ajax?其原理是什么?



一、什么是Ajax


JavaScript基礎:什么是ajax?其原理是什么?

AJAX即“Asynchronous Javascript And XML”,Ajax是一種異步請求數據的web開發技術,對于改善用戶的體驗和頁面性能很有幫助 。簡單地說 , 在不需要重新刷新頁面的情況下,Ajax 通過異步請求加載后臺數據,并在網頁上呈現出來 。常見運用場景有表單驗證是否登入成功、百度搜索下拉框提示和快遞單號查詢等等 。Ajax的目的是提高用戶體驗,較少網絡數據的傳輸量 。同時,由于AJAX請求獲取的是數據而不是HTML文檔,因此它也節省了網絡帶寬 , 讓互聯網用戶的網絡沖浪體驗變得更加順暢 。

二、Ajax原理是什么

在解釋Ajax原理之前 , 我們不妨先舉個“領導想找小李匯報一下工作”例子,領導想找小李問點事,就委托秘書去叫小李,自己就接著做其他事情,直到秘書告訴他小李已經到了,最后小李跟領導匯報工作 。
JavaScript基礎:什么是ajax?其原理是什么?

Ajax請求數據流程與“領導想找小李匯報一下工作”類似 。其中最核心的依賴是瀏覽器提供的XMLHttpRequest對象,它扮演的角色相當于秘書 , 使得瀏覽器可以發出HTTP請求與接收HTTP響應 。瀏覽器接著做其他事情,等收到XHR返回來的數據再渲染頁面 。
JavaScript基礎:什么是ajax?其原理是什么?

理解了Ajax的工作原理后,接下來我們探討下如何使用Ajax 。

三、Ajax的使用

1.創建Ajax核心對象XMLHttpRequest(兼容性)
1. var xhr=null;2. if (window.XMLHttpRequest)3. {// 兼容 IE7+, Firefox, Chrome, Opera, Safari4. xhr=new XMLHttpRequest();5. } else{// 兼容 IE6, IE56. xhr=new ActiveXObject("Microsoft.XMLHTTP");7. } 2.向服務器發送請求
1. xhr.open(method,url,async);2. send(string);//post請求時才使用字符串參數,否則不用帶參數 。
  • method:請求的類型;GET 或 POST
  • url:文件在服務器上的位置
  • async:true(異步)或 false(同步)
注意:post請求一定要設置請求頭的格式內容
xhr.open("POST","test.html",true); xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xhr.send("fname=Henry&lname=Ford"); //post請求參數放在send里面 , 即請求體3.服務器響應處理(區分同步跟異步兩種情況)
responseText 獲得字符串形式的響應數據 。
responseXML 獲得XML 形式的響應數據 。
①同步處理
1. xhr.open("GET","info.txt",false);2. xhr.send();3. document.getElementById("myDiv").innerHTML=xhr.responseText; //獲取數據直接顯示在頁面上②異步處理
相對來說比較復雜 , 要在請求狀態改變事件中處理 。
1. xhr.onreadystatechange=function() {2. if (xhr.readyState==4 &&xhr.status==200) {3. document.getElementById("myDiv").innerHTML=xhr.responseText;4. } 5. } 什么是readyState?
readyState是XMLHttpRequest對象的一個屬性,用來標識當前XMLHttpRequest對象處于什么狀態 。
readyState總共有5個狀態值 , 分別為0~4,每個值代表了不同的含義
  • 0:未初始化 -- 尚未調用.open()方法;
  • 1:啟動 -- 已經調用.open()方法,但尚未調用.send()方法;
  • 2:發送 -- 已經調用.send()方法,但尚未接收到響應;
  • 3:接收 -- 已經接收到部分響應數據;
  • 4:完成 -- 已經接收到全部響應數據 , 而且已經可以在客戶端使用了;
什么是status?
HTTP狀態碼(status)由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,后兩個數字沒有分類的作用 。HTTP狀態碼共分為5種類型:
JavaScript基礎:什么是ajax?其原理是什么?

常見的狀態碼
僅記錄在 RFC2616 上的 HTTP 狀態碼就達 40 種,若再加上 WebDAV(RFC4918、5842)和附加 HTTP 狀態碼 (RFC6585)等擴展,數量就達 60 余種 。接下來,我們就介紹一下這些具有代表性的一些狀態碼 。
  • 200 表示從客戶端發來的請求在服務器端被正常處理了 。
  • 204 表示請求處理成功,但沒有資源返回 。
  • 301 表示永久性重定向 。該狀態碼表示請求的資源已被分配了新的URI,以后應使用資源現在所指的URI 。
  • 302 表示臨時性重定向 。
  • 304 表示客戶端發送附帶條件的請求時(指采用GET方法的請求報文中包含if-matched,if-modified-since,if-none-match,if-range,if-unmodified-since任一個首部)服務器端允許請求訪問資源,但因發生請求未滿足條件的情況后,直接返回304Modified(服務器端資源未改變 , 可直接使用客戶端未過期的緩存)
  • 400 表示請求報文中存在語法錯誤 。當錯誤發生時,需修改請求的內容后再次發送請求 。
  • 401 表示未授權(Unauthorized),當前請求需要用戶驗證
  • 403 表示對請求資源的訪問被服務器拒絕了
  • 404 表示服務器上無法找到請求的資源 。除此之外,也可以在服務器端拒絕請求且不想說明理由時使用 。
  • 500 表示服務器端在執行請求時發生了錯誤 。也有可能是Web應用存在的bug或某些臨時的故障 。
  • 503 表示服務器暫時處于超負載或正在進行停機維護,現在無法處理請求 。
③GET和POST請求數據區別
  • 使用Get請求時,參數在URL中顯示,而使用Post方式,則放在send里面
  • 使用Get請求發送數據量小,Post請求發送數據量大
  • 使用Get請求安全性低,會被緩存,而Post請求反之
關于第一點區別 , 詳情見下面兩張圖:
JavaScript基礎:什么是ajax?其原理是什么?


JavaScript基礎:什么是ajax?其原理是什么?

【JavaScript基礎:什么是ajax?其原理是什么?】其實XMLHttpRequest或者封裝后的框架進行網絡請求,這種方式已經有點老舊了,配置和調用方式非?;靵y,近幾年剛剛出來的Fetch提供了一個更好的替代方法,它不僅提供了一種簡單,合乎邏輯的方式來跨網絡異步獲取資源,而且可以很容易地被其他技術使用 。

相關經驗推薦