ajax的實(shí)現(xiàn)
var getXmlHttpRequest = function () {
if (window.XMLHttpRequest) {
//主流瀏覽器提供了XMLHttpRequest對象
return new XMLHttpRequest();
}
else if (window.ActiveXObject) {
//低版本的IE瀏覽器沒有提供XMLHttpRequest對象
//所以必須使用IE瀏覽器的特定實(shí)現(xiàn)ActiveXObject
return new ActiveXObject("Microsoft.XMLHTTP");
}
};
var xhr = getXmlHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
//獲取成功后執(zhí)行操作
//數(shù)據(jù)在xhr.responseText
}
};
xhr.open("TYPE", "URL", true); //get/post url boolean表示是否使用異步
xhr.send(""); // get-> send(null) post-> send(data)
readyState的五種狀態(tài)
- 請求尚未初始化, 已經(jīng)創(chuàng)建了一個XMLHttpRequest對象
- 服務(wù)器鏈接已經(jīng)建立, 已經(jīng)調(diào)用了XMLHttpRequest對象的open方法,并且XMLHttpRequest對象已經(jīng)準(zhǔn)備好將一個請求發(fā)送到服務(wù)器端
- 請求已經(jīng)發(fā)送, 已經(jīng)通過send方法把一個請求發(fā)送到服務(wù)器端,但是還沒有收到一個響應(yīng)
- 請求處理中, 已經(jīng)接收到HTTP響應(yīng)頭部信息,但是消息體部分還沒有完全接收到
- 請求完成, 且響應(yīng)已經(jīng)就緒
status狀態(tài)嗎
status是XMLHttpRequest對象的一個屬性,表示響應(yīng)的HTTP狀態(tài)碼。
在HTTP1.1協(xié)議下,HTTP狀態(tài)碼總共可分為5大類,如下表所示:
1XX 服務(wù)器收到請求,需要繼續(xù)處理。例如101狀態(tài)碼,表示服務(wù)器將通知客戶端使用更高版本的HTTP協(xié)議。
2XX 請求成功。例如200狀態(tài)碼,表示請求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回。
3XX 重定向。例如302狀態(tài)碼,表示臨時重定向,請求將包含一個新的URL地址,客戶端將對新的地址進(jìn)行GET請求。
4XX 客戶端錯誤。例如404狀態(tài)碼,表示客戶端請求的資源不存在。
5XX 服務(wù)器錯誤。例如500狀態(tài)碼,表示服務(wù)器遇到了一個未曾預(yù)料的情況,導(dǎo)致了它無法完成響應(yīng),一般來說,這個問題會在程序代碼出錯時出現(xiàn)。