# ajax簡介
AJAX 即 “Asynchronous JavaScript and XML”(異步的 JavaScript 與 XML 技術),指的是一套綜合了多項技術的瀏覽器端網頁開發技術。AJAX 的概念由 Jesse James Garrett 所提出,說白了**就可以使用 JavaScript 代碼發送網絡請求并處理響應,由瀏覽器實現**。
傳統的 Web 應用允許用戶端填寫表單(form),當提交表單時就向網頁服務器發送一個請求。服務器接收并處理傳來的表單,然后送回一個新的網頁,但這個做法浪費了許多帶寬,因為在前后兩個頁面中的大部分 HTML 碼往往是相同的。由于每次應用的溝通都需要向服務器發送請求,應用的回應時間依賴于服務器的回應時間。這導致了用戶界面的回應比本機應用慢得多。
與此不同,AJAX 應用可以僅向服務器發送并取回必須的數據,并在客戶端采用 JavaScript 處理來自服務器的回應。因為在服務器和瀏覽器之間交換的數據大量減少,服務器回應更快了。同時,很多的處理工作可以在發出請求的客戶端機器上完成,因此 Web 服務器的負荷也減少了。
# AJAX 為什么要使用它, 它的特點, 本質是什么
提供網絡傳輸效率, 減輕服務器壓力, 增加用戶體驗性
? 異步局部刷新
? 使用 JS 代碼發送請求并處理響應, 運行瀏覽器環境下
? 驗證用戶是否存在, 發送短信驗證碼等等
# 使用 AJAX 發送請求
## 代碼步驟
* 創建 AJAX 對象;
* 設置請求路徑,請求方式等;
* 綁定監聽狀態改變的處理函數,在處理函數可獲取響應數據;
* 發送請求。
## 兼容性問題
~~~
function createAjax() {
? ?var ajax;
? ?try { ? ? ? // 非 IE
? ? ? ?ajax = new XMLHttpRequest();
? }
? ?catch (e) { // IE
? ? ? ?ajax = new ActiveXObject('Microsoft.XMLHTTP');
? }
? ?return ajax;
}
~~~
## 響應處理
響應處理,即對服務響應回瀏覽器的數據根據狀態碼和 AJAX 對象的狀態信息進行不同的處理,在綁定狀態改變的處理函數中寫對應的邏輯代碼即可。
AJAX 對象有 4 個屬性:
* readyState 總共有 5 個狀態值,分別為 0 ~ 4,每個值代表了不同的含義:
* 0:初始化,AJAX 對象還沒有完成初始化
* 1:載入,AJAX 對象開始發送請求
* 2:載入完成,AJAX 對象的請求發送完成
* 3:解析,AJAX 對象開始讀取服務器的響應
* 4:完成,AJAX 對象讀取服務器響應結束
* status 表示響應的 HTTP 狀態碼,常見狀態碼如下:
* 200:成功
* 302:重定向
* 404:找不到資源
* 500:服務端錯誤
* responseText 獲得字符串形式的響應數據。
* responseXML 獲得 XML 形式的響應數據。
綜合以上,在狀態改變的處理函數一般針對 readyState == 4 且 status == 200 的情況才處理,再根據后臺返回的數據類型決定從 responseText 或者 responseXML 獲取服務器響應回去來的數據。