解釋 AJAX 請求中不同的就緒狀態


AJAX 代表非同步 JavaScript 和 XML。它是一組用於建立互動式 Web 應用程式的 Web 開發技術。AJAX 允許網頁在不重新載入頁面的情況下與伺服器通訊。

就緒狀態是使用 AJAX 請求的重要部分。請求的就緒狀態指示請求對伺服器的狀態,並允許客戶端跟蹤請求的進度。

在下文中,我們詳細介紹了 AJAX 的不同就緒狀態。

未傳送狀態 (0)

這是 AJAX 的第一個就緒狀態。它由整數 0 表示。當使用 AJAX 請求時,在呼叫 send() 方法之前,請求被認為處於“未傳送”狀態。這意味著請求尚未傳送到伺服器,表明請求仍需要傳送。此狀態也稱為 XMLHttpRequest.UNSENT。

語法

http.onreadystatechange = function () {
   if (this.readyState == 0) {
      
      //put your code here
      console.log('This is UNSET state')
   }
}

已開啟狀態 (1)

這是 AJAX 的第二個就緒狀態。它由整數 1 表示。AJAX 請求的已開啟狀態是指請求已傳送到伺服器,但尚未收到響應。這通常是 AJAX 請求週期中的第一步,通常由使用者操作觸發,例如單擊按鈕或提交表單。這表明請求已開啟且請求頭已傳送。

例如,當用戶單擊按鈕提交表單時,AJAX 請求將傳送到伺服器,伺服器隨後處理請求併發送回響應。然後瀏覽器處理此響應,並相應地更新頁面。另一個示例是,當用戶單擊連結以載入更多內容時,將向伺服器傳送 AJAX 請求以獲取其他內容,然後將其顯示在頁面上。

語法

http.onreadystatechange = function () {
   if (this.readyState == 1) {
      
      //put your code here
      console.log('This is OPENED state')
   }
}

已接收頭部狀態 (2)

這是 AJAX 的第三個就緒狀態。它由整數 2 表示。已接收頭部是 AJAX 中請求的一種狀態,當請求傳送且伺服器以其頭部做出響應時發生。伺服器已收到請求並正在準備響應,表明已收到響應頭。

例如,當用戶傳送請求以檢視網頁時,伺服器將透過傳送回頁面頭來響應。這些頭包含諸如內容型別、頁面長度和上次修改頁面日期等資訊。

另一個示例是,當用戶向伺服器傳送請求以下載檔案時。伺服器將透過傳送迴文件頭來響應,例如檔案的大小和型別以及上次修改的日期。

語法

http.onreadystatechange = function () {
   if (this.readyState == 2) {
      
      //put your code here
      console.log('This is HEADERS_RECEIVED state')
   }
}

載入狀態 (3)

AJAX 中請求的載入狀態是指請求已傳送到伺服器並已收到響應。在此期間,請求的狀態為“載入”,這表示正在接收響應正文。

例如,當用戶單擊按鈕提交表單時,載入狀態是提交表單時以及從伺服器返回響應(例如,成功或錯誤訊息)時。

另一個示例是,當用戶單擊連結以導航到新頁面時。載入狀態是單擊連結並載入新頁面時。

語法

http.onreadystatechange = function () {
   if (this.readyState == 3) {
      
      //put your code here
      console.log('This is LOADING state')
   }
}

完成狀態 (4)

AJAX 中請求的完成狀態是指請求已完成且已收到響應。這是伺服器已對請求做出響應且資料可用於進一步處理的點。這表示請求已完成並且已收到響應。

語法

http.onreadystatechange = function () {
   if (this.readyState == 4) {
      
      //put your code here
      console.log('This is DONE state')
   }
}

示例

在此示例中,我們將執行 AJAX 呼叫並檢視不同的就緒狀態。我們將更新網頁以顯示不同的狀態,並說明其當前狀態。我們無法執行未傳送狀態,因為此狀態僅在傳送 AJAX 呼叫之前可用。我們使用按鈕單擊事件處理程式來觸發 AJAX 呼叫。

<html>
<body>
   <h2>Different <i>Ready State</i> of AJAX</h2>
   <button onclick = "ajaxCall()">Trigger AJAX Call</button>
   <div id = "root" style = "border: 1px solid black; padding: 1%"></div>
   <script>
      let root = document.getElementById('root')
      function ajaxCall() {
         root.innerHTML = 'AJAX Call Started! <br /><br />'
            
         //AJAX Call
         let http = new XMLHttpRequest()
         http.onreadystatechange = function () {
            if (this.readyState == 1) {
               root.innerHTML += 'This is OPENED state <br />'
            }
            if (this.readyState == 2) {
               root.innerHTML += 'This is HEADERS_RECEIVED state <br />'
            }
            if (this.readyState == 3) {
               root.innerHTML += 'This is LOADING state <br />'
            }
            if (this.readyState == 4) {
               root.innerHTML += 'This is DONE state <br />'
            }
         }
         http.open('GET', 'https://jsonplaceholder.typicode.com/posts/', true)
         http.onload = function () {
            root.innerHTML += '<br />AJAX Call Completed!'
         }
         http.send()
      }
   </script>
</body>
</html>

結論

在 JavaScript 中,AJAX 請求有四個不同的就緒狀態:未傳送、已開啟、已接收頭部和完成。未傳送狀態是指請求尚未傳送到伺服器。已開啟狀態是指請求已傳送到伺服器但尚未收到響應。已接收頭部狀態是指伺服器已以其頭部做出響應並正在準備響應。完成狀態是指請求已完成且已收到響應。可以透過 XMLHttpRequest 物件的 readyState 屬性訪問這些就緒狀態中的每一個。它們可用於跟蹤 AJAX 請求的進度並適當地處理響應。

更新於: 2023年1月5日

2K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.