1. 程式人生 > 實用技巧 >Ajax執行原理及實現

Ajax執行原理及實現

Ajax執行原理及實現

Ajax應用場景

  1. 頁面上拉載入更多資料
  2. 列表資料無重新整理分頁
  3. 表單項離開焦點資料驗證
  4. 搜尋框提示文字下拉列表

Ajax實現步驟

//建立ajax物件
var xhr = new XMLHttpRequest();
//告訴ajax要向哪傳送請求,以什麼方式傳送
//1)請求方式 2)請求地址
xhr.open('get','http://localhost:3000/first');
//傳送請求
xhr.send();
//獲取伺服器端響應到客戶端的資料
xhr.onload = function(){
    console.log(xhr.responseText);
}

伺服器端響應的資料格式

在真實的專案中,伺服器大多數情況下會以JSON物件作為響應資料的格式。當客戶端拿到響應資料時,要將JSON資料和HTML字串進行拼接,然後將拼接的結果展示在頁面上。

在http請求與相應的過程中,無論是請求引數還是響應內容,如果是物件型別,最終都會被轉換為物件字串進行傳輸。

JSON.parse()	//將json字串轉換為json物件

請求引數傳遞

  • GET請求方式
xhr.open('get', 'http://www.example.com?name=zs&password=123');
  • POST請求方式
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.send('name=zs&password=123')

請求引數的格式

  1. application/x-www-form-urlencoded
name=zs&age=18&sex=男

2.application/json

{name:'zs', age:'18', sex:'男'}

在請求頭中指定Content-Type屬性的值是application/json,告訴伺服器當前請求引數的格式是json。

JSON.stringify()//將json物件轉換為json字串

獲取伺服器端的響應

Ajax狀態碼

在建立ajax物件,配置ajax物件,傳送請求,以及接受完伺服器端響應資料,這個過程中的每一個步驟都會對應一個數值,這個數值就是ajax狀態碼

0:請求未初始化(還沒有呼叫open())

1:請求已經建立,但是還沒有傳送(還沒有呼叫send())

2:請求已經發送

3:請求正在處理中,通常響應中已經有部分資料可以用了

4:響應已經完成,可以獲取並使用伺服器的響應了

xhr.readyState	//獲取Ajax狀態碼
onreadystatechange事件
兩種獲取伺服器端響應方式的區別
區別描述 onload事件 onreadystatechange事件
是否相容IE低版本 不相容 相容
是否需要判斷Ajax狀態碼 不需要 需要
被呼叫次數 一次 多次

Ajax錯誤處理

  1. 網路暢通,伺服器能接收到請求,伺服器返回的結果不是預期結果

可以判斷伺服器端返回的狀態碼,分別進行處理。xhr.status獲取http狀態碼

  1. 網路暢通,伺服器端沒有接收到請求,返回404狀態碼

檢查請求地址是否錯誤

  1. 網路暢通,伺服器端能接收到請求,伺服器端返回500狀態碼

伺服器端錯誤,找後端程式設計師進行溝通

  1. 網路中斷,請求無法傳送到伺服器端

會觸發xhr物件下面的onerror事件,在onerror事件處理函式中對錯誤進行處理

Ajax狀態碼與http狀態碼的區別

Ajax狀態碼:表示Ajax請求的過程狀態,ajax物件返回的

http狀態碼:表示請求的處理結果,是伺服器端返回的

低版本IE瀏覽器的快取問題

問題:在低版本的IE瀏覽器中,Ajax請求有嚴重的快取問題,即在請求地址不發生變化的情況下,只有第一次請求會真正傳送到伺服器端,後續的請求都會從瀏覽器的快取中獲取結果。及時伺服器端的資料更新了,客戶端依然拿到的是快取中的舊資料。

解決方案:在請求地址的後面加請求引數,保證每一次請求中的請求引數的值不相同。

xhr.open('get', 'http://www.example.com?t='+Math.random());