AJAX全稱為 Asynchronous Javasript And XML,是在瀏覽器端進行網路編程(發送請求,接收響應)的技術方案。AJAX 也就是瀏覽器提供的一套API,可以供 Javascript 調用,從而通過代碼來控制請求和響應,實現網路編程。 AJAX 使用基本模板 使用 AJAX 的 ...
AJAX全稱為 Asynchronous Javasript And XML,是在瀏覽器端進行網路編程(發送請求,接收響應)的技術方案。AJAX 也就是瀏覽器提供的一套API,可以供 Javascript 調用,從而通過代碼來控制請求和響應,實現網路編程。
AJAX 使用基本模板
使用 AJAX 的過程相當於訪問一個頁面
// 1.創建一個 XMLHttpRequest 的對象(相當於打開了一個瀏覽器)
// 相容方案
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); // 2,輸入網址(get或post 根據需求設置,一般參數通過url傳遞則使用 get, 關於賬戶密碼等敏感信息使用 post) xhr.open('get', 'time.php'); // 3.敲回車,開始請求 // 因為響應需要時間,所以無法通過返回值的方式返迴響應 // var response = xhr.send(); // console.log(response); xhr.send(); // 3.等待響應 xhr.addEventListener('readystatechange', function () { if (this.readyState === 4) { // 獲取響應體 console.log(this.responseText); } });
詳解等待狀態(readyState)
readyState | 狀態描述 | 含義 |
0 | unsent | 初始化,請求了一個代理對對象, |
1 | opened | open()方法已經調用,建立一個與服務端特定埠的連接 |
2 | header_receive | 已經接收到了響應頭,但是還沒有接收響應體 |
3 | loading | 正在下載響應體 |
4 | done | 響應體下載完成,可以直接使用 responseText |
遵循HTTP
var xhr = new XMLHttpRequest(); // 設置請求行 xhr.open('get', 'time.php'); // 設置請求頭 xhr.setRequestHeader('Accept', 'text/plain'); // 設置請求體 xhr.send(null); xhr.addEventListener('readystatechange', function () { if (this.readyState === 4 && this.status === 200) { // 獲取響應狀態碼 console.log(this.status); // 獲取響應狀描述 console.log(this.statusText); // 獲取響應頭信息 console.log(this.getResponseHeader('Content-Type')); // 指定響應頭 console.log(this.getAllResponseHeaders()); // 全部響應頭 // 轉換成數組 console.log(this.getAllResponseHeaders().split("\n")); // 獲取響應頭中的某一個信息 console.log(this.getResponseHeader('server')); } });
同步與非同步
同步:在同一時刻只能做同一件事,在執行一些耗時的事情時不去做其他事情,而是等待
非同步:在執行一些耗時的事情是去做其他事情,而不是等待(性能更好,預設為 true)
同步:
console.time('ajax同步'); const xhrSync = new XMLHttpRequest(); xhrSync.open('get', 'time.php', false); xhrSync.send(); // 同步代碼會卡在 send() 這裡 console.log(xhrSync.responseText); console.timeEnd('ajax同步');
非同步:
// 非同步性能更好,時間更短 console.time('ajax非同步'); const xhr = new XMLHttpRequest();
// 這裡 第三個參數預設為 true,即不寫true時為非同步(大多數使用) xhr.open('get', 'time.php', true); xhr.send(); console.log(xhr.responseText); console.timeEnd('ajax非同步');