XMLHttpRequest

一直使用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. 屬性

此接口繼承了XMLHttpRequestEventTargetEventTarget 的屬性

  1. XMLHttpRequest.onreadystatechange
    • 語(yǔ)法: XMLHttpRequest.onreadystatechange = callback
    • 當(dāng)readyState的值改變的時(shí)候春塌, callback函數(shù)會(huì)被調(diào)用
  2. 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ù)傳輸已徹底完成或失敗
  3. 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)
  4. XMLHttpRequest.responseText
    • 只讀柠新,返回一個(gè)DOMString,包含對(duì)文本的請(qǐng)求的響應(yīng)窍荧,如果請(qǐng)求不成功或尚未發(fā)送,返回null恨憎。
    • 如果XMLHttpRequest的值是text或空字符串蕊退,responseText屬性在請(qǐng)求完成之前將會(huì)得到部分屬性。如果不是憔恳,訪問(wèn)該屬性會(huì)拋出異常瓤荔。
  5. 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
  6. XMLHttpRequest.responseURL
    • 只讀,返回響應(yīng)的基礎(chǔ)鏈接者铜, #后的參數(shù)會(huì)被刪除腔丧。如果URL為空,返回空字符串作烟。
  7. XMLHttpRequest.responseXML
    • 只讀愉粤,返回一個(gè)包含請(qǐng)求檢索的HTML或XML的Document。如果請(qǐng)求成功拿撩,尚未發(fā)送衣厘,或者檢索的數(shù)據(jù)無(wú)法正確解析為XML或HTML,則為null。
  8. 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)求
  9. 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"
  10. 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è)置棍矛。
  11. 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 | 獲取完成(不論成功與否)
  12. 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. 方法

  1. XMLHttpRequest.abort()
    • 如果請(qǐng)求已經(jīng)被發(fā)送狰闪,就立刻中止請(qǐng)求
  2. XMLHTttpRequest.getAllResponseHeaders()
    • 以字符串的形式返回所有用CRLF分隔的響應(yīng)頭疯搅,如果沒(méi)有收到相應(yīng),則返回null
  3. XMLHttpRequest.getResponseHeader()
    • 返回包含指定響應(yīng)頭的字符串埋泵,如果響應(yīng)尚未收到或響應(yīng)中不存在該報(bào)頭幔欧,返回null
  4. XMLHttpRequest.open()
    • 初始化一個(gè)請(qǐng)求罪治。該方法只能用JavaScript中使用。若要在native code中初始化請(qǐng)求礁蔗,使用openRequest()
  5. XMLHttpRequest.overrideMimeType()
    • 重寫(xiě)由服務(wù)器返回的MIME type
  6. XMLHttpRequest.send()
    • 發(fā)送請(qǐng)求觉义。如果請(qǐng)求是異步(默認(rèn))的,該方法將在請(qǐng)求發(fā)送后立即返回
  7. XMLHttpRequest.setRequestHeader()
    • 設(shè)置HTTP請(qǐng)求頭的值浴井,必須在open() 之后谁撼、send()之前調(diào)用。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滋饲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子喊巍,更是在濱河造成了極大的恐慌屠缭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崭参,死亡現(xiàn)場(chǎng)離奇詭異呵曹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)何暮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)奄喂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人海洼,你說(shuō)我怎么就攤上這事跨新。” “怎么了坏逢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵域帐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我是整,道長(zhǎng)肖揣,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任浮入,我火速辦了婚禮龙优,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘事秀。我一直安慰自己彤断,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布易迹。 她就那樣靜靜地躺著瓦糟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赴蝇。 梳的紋絲不亂的頭發(fā)上菩浙,一...
    開(kāi)封第一講書(shū)人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼劲蜻。 笑死陆淀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的先嬉。 我是一名探鬼主播轧苫,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疫蔓!你這毒婦竟也來(lái)了含懊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤衅胀,失蹤者是張志新(化名)和其女友劉穎岔乔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體滚躯,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雏门,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掸掏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茁影。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖丧凤,靈堂內(nèi)的尸體忽然破棺而出募闲,到底是詐尸還是另有隱情,我是刑警寧澤愿待,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布蝇更,位于F島的核電站,受9級(jí)特大地震影響呼盆,放射性物質(zhì)發(fā)生泄漏年扩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一访圃、第九天 我趴在偏房一處隱蔽的房頂上張望厨幻。 院中可真熱鬧,春花似錦腿时、人聲如沸况脆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)格了。三九已至,卻和暖如春徽鼎,著一層夾襖步出監(jiān)牢的瞬間盛末,已是汗流浹背弹惦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悄但,地道東北人棠隐。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像檐嚣,于是被迫代替她去往敵國(guó)和親助泽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容