在前端開發中,我們經常會遇到需要與服務器進行數據交互的情況。而為了更好地處理這種交互過程,Ajax(Asynchronous JavaScript and XML)被引入。Ajax允許我們通過發送HTTP請求與服務器進行異步通信,以便獲取數據或更新頁面內容。
在編寫Ajax代碼時,我們常常需要檢查服務器返回的狀態碼來判斷請求的處理結果。在原生Ajax中,狀態碼主要有五個:0、1、2、3和4。不同的狀態碼對應著不同的請求狀態和處理結果。
首先,我們來看一下狀態碼為0的情況。狀態碼為0表示請求尚未初始化,即還沒有調用open()方法。這種情況通常發生在我們嘗試發送一個尚未初始化的請求。例如:
var xhr = new XMLHttpRequest(); console.log(xhr.readyState); // 輸出0 xhr.open('GET', 'https://www.example.com/api/data', true);
接下來是狀態碼為1的情況。狀態碼為1表示請求已經建立,但尚未發送。這種情況通常發生在我們調用了open()方法后,但還沒有調用send()方法發送請求。例如:
var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://www.example.com/api/data', true); console.log(xhr.readyState); // 輸出1
狀態碼為2代表請求已經發送,正在等待服務器響應。這種情況通常發生在我們調用了send()方法后,但服務器還沒有返回響應。例如:
var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://www.example.com/api/data', true); xhr.send(); console.log(xhr.readyState); // 輸出2
狀態碼為3表示服務器已經接收到請求,并正在處理中。這種情況通常發生在服務器已經發送部分響應數據,但并未完成全部響應的情況下。例如:
var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { console.log(xhr.readyState); // 輸出3 } xhr.open('GET', 'https://www.example.com/api/data', true); xhr.send();
最后,狀態碼為4代表請求已經完成,且響應已經就緒。這種情況通常發生在服務器已經返回了全部響應數據,并且可以進行處理的情況下。例如:
var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { console.log(xhr.statusText); // 輸出 "OK" console.log(xhr.responseText); // 輸出響應數據 } } xhr.open('GET', 'https://www.example.com/api/data', true); xhr.send();
通過對Ajax原生狀態碼0、1、2、3和4的介紹,我們可以更好地了解和處理Ajax請求過程中的不同階段。無論是待發送未發送的請求、正在等待響應的請求,還是已經完成響應的請求,我們都可以通過狀態碼來進行判斷和處理,以達到更好的用戶交互和數據處理效果。