一直使用axios進(jìn)行http配置仍侥,發(fā)現(xiàn)自己最基礎(chǔ)的AJAX的內(nèi)容忘記了。復(fù)習(xí)下肝匆。
1.XMLHttpRequest
- XMLHTTP最初是由微軟公司發(fā)明的稳衬,在Internet Explorer 5.0中用作ActiveX對(duì)象血柳,可通過(guò)JavaScript、VBScript或其它瀏覽器支持的腳本語(yǔ)言訪問(wèn)。Mozilla的開(kāi)發(fā)人員后來(lái)在Mozilla 1.0中實(shí)現(xiàn)了一個(gè)兼容的版本。之后蘋(píng)果計(jì)算機(jī)公司在Safari 1.2中開(kāi)始支持XMLHTTP犀盟,而Opera從8.0版開(kāi)始也宣布支持XMLHTTP。 ----- 維基百科
- XMLHttpRequest (XHR)對(duì)象是Web API的一個(gè)接口蝇狼。使用XHR對(duì)象可以與服務(wù)器交互阅畴,從URL中獲取數(shù)據(jù),而無(wú)需讓整個(gè)頁(yè)面刷新迅耘,因此成為Ajax編程的基礎(chǔ)
- 層級(jí)關(guān)系:
- XHR可以用于獲取任何類型的數(shù)據(jù)贱枣,而不僅僅是XML,還支持HTTP以外的協(xié)議(包括文件和ftp)
- 如果需要從服務(wù)器接受事件或消息數(shù)據(jù)颤专,可以考慮
[EventSource](https://developer.mozilla.org/zh-CN/docs/Server-sent_events/Using_server-sent_events)
接口適用serversent event纽哥。對(duì)于full-duplex通信,可以選擇[WebSocket](https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API)
2. Constructor 構(gòu)造方法
-
XMLHttpRequest()
構(gòu)造函數(shù)初始化一個(gè)XMLHttpRequest
對(duì)象栖秕。必須在所有其他方法被調(diào)用前調(diào)用構(gòu)造函數(shù)
3. 屬性
此接口繼承了XMLHttpRequestEventTarget
和 EventTarget
的屬性
-
XMLHttpRequest.onreadystatechange
- 語(yǔ)法:
XMLHttpRequest.onreadystatechange = callback
- 當(dāng)
readyState
的值改變的時(shí)候春塌,callback
函數(shù)會(huì)被調(diào)用
- 語(yǔ)法:
-
XMLHttpRequest.readyState
- 只讀,該屬性返回一個(gè)XMLHttpRequest代理當(dāng)前所處的狀態(tài)的狀態(tài)碼
- 一個(gè)XHR代理總是以下?tīng)顟B(tài)之一
值 | 狀態(tài) | 描述
-----|-----|-----
0 | UNSENT | 代理被創(chuàng)建,尚未調(diào)用open()方法
1 | OPENED | open()方法已經(jīng)被調(diào)用摔笤。在這個(gè)狀態(tài)中,可以通過(guò)setRequestHeader()方法來(lái)設(shè)置請(qǐng)求的頭部垦写,可以調(diào)用send()方法來(lái)發(fā)起請(qǐng)求
2 | HEADERS_RECEIVED | send()方法已經(jīng)被調(diào)用吕世,響應(yīng)頭也已經(jīng)被接收
3 | LOADING | 下載中,響應(yīng)體部分正在被接收梯投。如果responseType
屬性是text
或空字符串命辖,responseText
將會(huì)在載入過(guò)程中擁有部分響應(yīng)數(shù)據(jù)
4 | DONE | 請(qǐng)求操作已完成。意味著數(shù)據(jù)傳輸已徹底完成或失敗
-
XMLHttpRequest.response
- 只讀分蓖,返回響應(yīng)的正文尔艇。可以是ArrayBuffer, Blob, Document, JavaScript對(duì)象或者一個(gè)DOMString 類型么鹤,取決于XMLHttpRequest.responseType屬性的值终娃。
- 如果請(qǐng)求未完成或未成功,響應(yīng)值為null蒸甜。但如果responseType的值設(shè)為"text"或空字符串棠耕,則響應(yīng)可以包含部分文本響應(yīng),而請(qǐng)求仍處于加載狀態(tài)
-
XMLHttpRequest.responseText
- 只讀柠新,返回一個(gè)DOMString,包含對(duì)文本的請(qǐng)求的響應(yīng)窍荧,如果請(qǐng)求不成功或尚未發(fā)送,返回null恨憎。
- 如果XMLHttpRequest的值是text或空字符串蕊退,responseText屬性在請(qǐng)求完成之前將會(huì)得到部分屬性。如果不是憔恳,訪問(wèn)該屬性會(huì)拋出異常瓤荔。
-
XMLHttpRequest.responseType
- 返回及設(shè)置返回響應(yīng)數(shù)據(jù)的類型。如果設(shè)為一個(gè)空字符串喇嘱,將默認(rèn)使用"text"類型茉贡。
- 語(yǔ)法
var type = XMLHttpRequest.responseType XMLHttpRequest.responseType = type
值 返回?cái)?shù)據(jù)的屬性 "" DOMString (默認(rèn)值) "arraybuffer" ArrayBuffer "blob" Blob "document" Document "json" JSON字符串 "text" DOMString -
XMLHttpRequest.responseURL
- 只讀,返回響應(yīng)的基礎(chǔ)鏈接者铜,
#
后的參數(shù)會(huì)被刪除腔丧。如果URL為空,返回空字符串作烟。
- 只讀,返回響應(yīng)的基礎(chǔ)鏈接者铜,
-
XMLHttpRequest.responseXML
- 只讀愉粤,返回一個(gè)包含請(qǐng)求檢索的HTML或XML的Document。如果請(qǐng)求成功拿撩,尚未發(fā)送衣厘,或者檢索的數(shù)據(jù)無(wú)法正確解析為XML或HTML,則為null。
-
XMLHttpRequest.status
- 只讀影暴,返回響應(yīng)中的數(shù)字狀態(tài)碼(HTTP status codes)错邦。在請(qǐng)求完成前,status的值為0型宙,如果XMLHttpRequest出錯(cuò)撬呢,返回的status也是0.
- e.g. status 200 代表一個(gè)成功的請(qǐng)求
-
XMLHttpRequest.statusText
- 只讀,返回一個(gè)DOMString,其中包含HTTP服務(wù)器返回的響應(yīng)狀態(tài)妆兑。與XMLHttpRequest.status不同的是魂拦,它包括響應(yīng)狀態(tài)的整個(gè)文本("200 OK" /" 404 Not Found")
- 如果請(qǐng)求的狀態(tài)
readyState
的值為UNSENT 或 OPENED, 這個(gè)屬性為一個(gè)空字符串。如果服務(wù)器未明確指定一個(gè)狀態(tài)文本信息搁嗓,則statusText
的值會(huì)被自動(dòng)賦值為"OK"
-
XMLHttpRequest.timeout
- 可用來(lái)設(shè)置一個(gè)請(qǐng)求在被自動(dòng)終止前所消耗的毫秒數(shù)芯勘。默認(rèn)值為0,意味著沒(méi)有超時(shí)腺逛。不能給同步請(qǐng)求設(shè)置超時(shí)毫秒數(shù)荷愕。
- 在IE中,超時(shí)屬性只能在調(diào)用open() 方法之后并且在調(diào)用send()方法之前設(shè)置棍矛。
-
XMLHttpRequest.upload
- 只讀路翻, 該方法返回一個(gè)
XMLHttpRequest
對(duì)象,用來(lái)表示上傳的進(jìn)度茄靠。這個(gè)對(duì)象是不透明的茂契,但是作為一個(gè)XMLHttpRequestEventTarget,可以通過(guò)對(duì)其綁定事件來(lái)追蹤它的進(jìn)度慨绳。 - 可以被綁定在upload對(duì)象上的事件監(jiān)聽(tīng)器如下:
事件 | 相應(yīng)屬性的信息類型
---- | ----------------
onloadstart | 獲取開(kāi)始
onprogress | 數(shù)據(jù)傳輸進(jìn)行中
onabord | 獲取操作終止
onerror | 獲取失敗
onload | 獲取成功
ontimeout | 獲取超時(shí)
onloadend | 獲取完成(不論成功與否)
- 只讀路翻, 該方法返回一個(gè)
-
XMLHttpRequest.widthCredentials
- 值為Boolean類型掉冶,指示了是否該使用類似cookies,authorization headers或者TLS客戶端證書(shū)這一類資格證書(shū)來(lái)創(chuàng)建一個(gè)跨站點(diǎn)訪問(wèn)控制(cross-site Access-Control)請(qǐng)求。在同一個(gè)站點(diǎn)下使用withCredentials屬性是無(wú)效的脐雪。
- 此外厌小,這個(gè)指示也會(huì)被用作響應(yīng)中cookies被忽視的標(biāo)志。默認(rèn)值是false战秋。
- 如果在發(fā)送來(lái)自其他域的XMLHttpRequest請(qǐng)求之前璧亚,未設(shè)置withCredentials為true,那么就不能為它自己的域設(shè)置cookie值。而通過(guò)設(shè)置wihtCredentials為true獲得電放cookies脂信,將將會(huì)依舊享受同源策略癣蟋,因此不能被通過(guò)document.cookie或者從頭部相應(yīng)請(qǐng)求的腳本訪問(wèn)。
4. 方法
- XMLHttpRequest.abort()
- 如果請(qǐng)求已經(jīng)被發(fā)送狰闪,就立刻中止請(qǐng)求
- XMLHTttpRequest.getAllResponseHeaders()
- 以字符串的形式返回所有用CRLF分隔的響應(yīng)頭疯搅,如果沒(méi)有收到相應(yīng),則返回null
- XMLHttpRequest.getResponseHeader()
- 返回包含指定響應(yīng)頭的字符串埋泵,如果響應(yīng)尚未收到或響應(yīng)中不存在該報(bào)頭幔欧,返回null
- XMLHttpRequest.open()
- 初始化一個(gè)請(qǐng)求罪治。該方法只能用JavaScript中使用。若要在native code中初始化請(qǐng)求礁蔗,使用openRequest()
- XMLHttpRequest.overrideMimeType()
- 重寫(xiě)由服務(wù)器返回的MIME type
- XMLHttpRequest.send()
- 發(fā)送請(qǐng)求觉义。如果請(qǐng)求是異步(默認(rèn))的,該方法將在請(qǐng)求發(fā)送后立即返回
- XMLHttpRequest.setRequestHeader()
- 設(shè)置HTTP請(qǐng)求頭的值浴井,必須在open() 之后谁撼、send()之前調(diào)用。