ajax的實(shí)現(xiàn)
var getXmlHttpRequest = function () {
if (window.XMLHttpRequest) {
//主流瀏覽器提供了XMLHttpRequest對(duì)象
return new XMLHttpRequest();
}
else if (window.ActiveXObject) {
//低版本的IE瀏覽器沒有提供XMLHttpRequest對(duì)象
//所以必須使用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)
- 請(qǐng)求尚未初始化, 已經(jīng)創(chuàng)建了一個(gè)XMLHttpRequest對(duì)象
- 服務(wù)器鏈接已經(jīng)建立, 已經(jīng)調(diào)用了XMLHttpRequest對(duì)象的open方法况鸣,并且XMLHttpRequest對(duì)象已經(jīng)準(zhǔn)備好將一個(gè)請(qǐng)求發(fā)送到服務(wù)器端
- 請(qǐng)求已經(jīng)發(fā)送, 已經(jīng)通過send方法把一個(gè)請(qǐng)求發(fā)送到服務(wù)器端,但是還沒有收到一個(gè)響應(yīng)
- 請(qǐng)求處理中, 已經(jīng)接收到HTTP響應(yīng)頭部信息,但是消息體部分還沒有完全接收到
- 請(qǐng)求完成, 且響應(yīng)已經(jīng)就緒
status狀態(tài)嗎
status是XMLHttpRequest對(duì)象的一個(gè)屬性,表示響應(yīng)的HTTP狀態(tài)碼。
在HTTP1.1協(xié)議下嗤谚,HTTP狀態(tài)碼總共可分為5大類,如下表所示:
1XX 服務(wù)器收到請(qǐng)求,需要繼續(xù)處理泌辫。例如101狀態(tài)碼,表示服務(wù)器將通知客戶端使用更高版本的HTTP協(xié)議九默。
2XX 請(qǐng)求成功震放。例如200狀態(tài)碼,表示請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回驼修。
3XX 重定向殿遂。例如302狀態(tài)碼,表示臨時(shí)重定向乙各,請(qǐng)求將包含一個(gè)新的URL地址墨礁,客戶端將對(duì)新的地址進(jìn)行GET請(qǐng)求。
4XX 客戶端錯(cuò)誤耳峦。例如404狀態(tài)碼恩静,表示客戶端請(qǐng)求的資源不存在。
5XX 服務(wù)器錯(cuò)誤妇萄。例如500狀態(tài)碼蜕企,表示服務(wù)器遇到了一個(gè)未曾預(yù)料的情況,導(dǎo)致了它無法完成響應(yīng)冠句,一般來說轻掩,這個(gè)問題會(huì)在程序代碼出錯(cuò)時(shí)出現(xiàn)。