1、XMLHttpRequest 對象 (XHR)瀏覽器
XMLHttpRequest 對象用於在後臺與服務器交換數據,有了這個對象,咱們能夠:服務器
在不從新加載頁面的狀況下更新網頁;app
在頁面已加載後從服務器請求數據;異步
在頁面已加載後從服務器接收數據;函數
在後臺向服務器發送數據。 post
2、建立XHRurl
Js代碼spa
//建立XMLHttpRequest對象 code
function createXMLHttpRequest(){ orm
var xmlHttpRequest;
if(window.XMLHttpRequest){
//IE8+, FF, Chrome等瀏覽器內置XHR對象,能夠直接建立
xmlHttpRequest = new XMLHttpRequest();
}else if(window.ActiveXObject){
//IE7和以前版本須要經過ActiveXObject建立XHR
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}else{
//其餘不支持XHR的瀏覽器
}
return xmlHttpRequest;
}
3、發送請求
在Javascrpt中使用XHR的如下方法發送請求:
Js代碼 /**
* 初始化XHR請求
* @param method 請求的類型(get/post)
* @param url 請求的url
* @param isAsync 是否使用異步請求
* @param username 對於要求認證的服務器,能夠提供用戶名
* @param password 對於要求認證的服務器,能夠提供密碼
*/
open(method, url[, isAsync=true[, username=null[, password=null]]]);
/**
* 發送請求
* @param data 做爲請求體的數據
*/
send([data=null]);
例:
var xhr = createXMLHttpRequest();
//使用同步方式發送GET請求
xhr.open("get", "http://sample.org/test", false);
xhr.send(null);
//使用異步方式發送POST請求並模擬表單提交
xhr.open("post", "http://sample.org/test", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("var1=val1&var2=val2");
4、註冊回調函數
xhr.onreadystatechange = function(){
// Do something...
}
5、經常使用屬性
1. readyState
HTTP 請求的狀態.當一個 XMLHttpRequest 初次建立時,這個屬性的值從 0 開始,直到接收到完整的 HTTP 響應,這個值增長到 4。
5 個狀態中每個都有一個相關聯的非正式的名稱,下表列出了狀態、名稱和含義
狀態 | 名稱 | 描述 |
0 | UNSENT | 初始化狀態。XMLHttpRequest 對象已建立或已被 abort() 方法重置。 |
1 | OPENED | open() 方法已調用,可是 send() 方法未調用。請求尚未被髮送。 |
2 | HEADERS_RECEIVED | Send() 方法已調用,HTTP 請求已發送到 Web 服務器。未接收到響應。 |
3 | LOADING | 全部響應頭部都已經接收到。響應體開始接收但未完成。 |
4 | DONE | HTTP 響應已經徹底接收。 |
readyState 的值不會遞減,除非當一個請求在處理過程當中的時候調用了 abort() 或 open() 方法。每次這個屬性的值增長的時候,都會觸發 readystatechange 事件。
2. responseText
這個responseText屬性包含客戶端接收到的HTTP響應的文本內容。當readyState值爲0、1或2時,responseText包含一個空字符串。當readyState值爲3(正在接收)時,響應中包含客戶端還未完成的響應信息。當readyState爲4(已加載)時,該responseText包含完整的響應信息。
3. responseXML
若是響應的內容是"text/xml"或者"application/xml",這個屬性將保存包含響應數據的XML DOM文檔(Document對象)。
4. status
響應的http狀態碼。
5. statusText
這個屬性用名稱而不是數字指定了請求的 HTTP 的狀態代碼。也就是說,當狀態爲 200 的時候它是 "OK",當狀態爲 404 的時候它是 "Not Found"。
6、Ajax示例
Js代碼
var xhr = createXMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState==4) {
if (xhr.status==200) {
//do something
}
}
}
xhr.open("get", "http://sample.org/test", true);
xhr.send(null);
7、其餘方法
Js代碼 /**
* 取消請求並關閉鏈接,XHR對象重置爲readyState爲0的狀態。
*/
abort()
/**
* 向一個打開但未發送的請求設置或添加一個HTTP請求頭信息。
* @param headerName 須要設置或添加的頭信息的名字(大小寫不敏感)
* @param value 設置或添加的頭信息的值
*/
setRequestHeader(headerName, value)
/**
* 取得一個包含全部響應的header信息的長字符串,若是 readyState 小於 3,這個方法返回 null。
*/
getAllResponseHeaders()
/**
* 取得指定的HTTP響應頭信息的值。
* @param headerName 須要從響應中得到的頭信息的名字(大小寫不敏感)
*/
getResponseHeader(headerName)