前端面試:簡述 JavaScript AJAX 的原理
JavaScript AJAX(Asynchronous JavaScript and XML)是一種用于異步加載和更新 Web 頁面的技術(shù)。它允許開發(fā)人員使用 JavaScript 從服務器獲取數(shù)據(jù),而無需刷新整個頁面,從而提高用戶體驗。以下是一個簡單的代碼實例,展示了如何使用 JavaScript AJAX 從服務器獲取數(shù)據(jù):
// 定義回調(diào)函數(shù)
function getData() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var response = JSON.parse(xhr.responseText);
// 處理獲取到的數(shù)據(jù)
console.log(response);
}
};
xhr.open('GET', 'https://example.com/data.json', true);
xhr.send();
}
// 調(diào)用 getData 函數(shù)
getData();
在上面的代碼中,getData() 函數(shù)會創(chuàng)建一個 XMLHttpRequest 對象,并設置 onreadystatechange 屬性,用于監(jiān)聽服務器的狀態(tài)變化。如果服務器響應成功,將通過 xhr.responseText 獲取到服務器返回的數(shù)據(jù),并在控制臺中輸出。
當用戶在瀏覽器中按下 F5 鍵或在后臺執(zhí)行某些操作時,getData() 函數(shù)會在頁面上顯示一個加載動畫,從而提高用戶體驗。同時,用戶可以通過按下 Ctrl+R 或點擊頁面上的“刷新”按鈕來獲取更新后的數(shù)據(jù)。
除了從服務器獲取數(shù)據(jù)外,JavaScript AJAX 還可以用于向服務器發(fā)送數(shù)據(jù)。例如,可以使用 AJAX 向服務器發(fā)送表單數(shù)據(jù),從而實現(xiàn)與服務器的交互。
ajax是很多種技術(shù)的集合體。
瀏覽器的xmlHTTPRequest對象,他是負責為你開通另一條連接通道,可以傳遞信息。
javascript:他是負責調(diào)用XMLHTTPRequest對象進行與后臺交互的媒介。
xml是一種數(shù)據(jù)格式,用于服務器應答傳遞信息的格式。除了xml外,還可以使用任何的文本格式,包括text,html,json等。
ajax并非一種新的技術(shù),而是幾種原有技術(shù)的結(jié)合體。它由下列技術(shù)組合而成。使用CSS和XHTML來表示。
使用DOM模型來交互和動態(tài)顯示。
使用XMLHttpRequest來和服務器進行異步通信。使用javascript來綁定和調(diào)用。
在上面幾種技術(shù)中,除了XmlHttpRequest對象以外,其它所有的技術(shù)都是基于web標準并且已經(jīng)得到了 廣泛使用的,XMLHttpRequest雖然目前還沒有被W3C所采納,但是它已經(jīng)是一個事實的標準,因為目前幾乎所有的主流瀏覽器都支持它。
XMLHttpRequest是ajax的核心機制,它是在IE5中首先引入的,是一種支持異步請求的技術(shù)。簡單的說, 也就是javascript可以及時向服務器提出請求和處理響應,而不阻塞用戶。達到無刷新的效果。
所以我們先從XMLHttpRequest講起,來看看它的工作原理。
XMLHttpRequest 的屬性它的屬性有:
onreadystatechange 每次狀態(tài)改變所觸發(fā)事件的事件處理程序。responseText 從服務器進程返回數(shù)據(jù)的字符串形式。responseXML 從服務器進程返回的DOM兼容的文檔數(shù)據(jù)對象。
status 從服務器返回的數(shù)字代碼,比如常見的404(未找到)和200(已就緒)。
status Text 伴隨狀態(tài)碼的字符串信息。
readyState 對象狀態(tài)值。
- (未初始化) 對象已建立,但是尚未初始化(尚未調(diào)用open方法)。
- (初始化) 對象已建立,尚未調(diào)用send方法。
- (發(fā)送數(shù)據(jù)) send方法已調(diào)用,但是當前的狀態(tài)及http頭未知。
- (數(shù)據(jù)傳送中) 已接收部分數(shù)據(jù),因為響應及http頭不全,這時通過responseBody和responseText獲取部分數(shù)據(jù)會出現(xiàn)。錯誤,
- (完成) 數(shù)據(jù)接收完畢,此時可以通過通過responseXml和responseText獲取完整的回應數(shù)據(jù)。
但是,由于各瀏覽器之間存在差異,所以創(chuàng)建一個XMLHttpRequest對象可能需要不同的方法。
這個差異主要體現(xiàn)在IE和其它瀏覽器之間。