XMLHttpRequest

1 .盡管名字里面有XML,Http,但是實(shí)際上是可以使用多種協(xié)議的file,ftp,發(fā)送任何形式的數(shù)據(jù),包括字符串和二進(jìn)制
2 .ajax只會(huì)向同源網(wǎng)址,發(fā)出http請求,跨域請求是會(huì)報(bào)錯(cuò)的
3 .

XMLHttpRequest.readyState

1 .返回一個(gè)整數(shù),表示實(shí)例對象的當(dāng)前狀態(tài),該屬性只讀。
2 .0 表示XMLHttprequest實(shí)例已經(jīng)生成,但是實(shí)例的open方法沒有被調(diào)用
3 .1 表示open方法已經(jīng)調(diào)用,可以使用實(shí)例的setRequestHeader()方法設(shè)置HTTP請求頭信息。此時(shí)send方法還沒調(diào)用
4 .2 表示實(shí)例的send方法已經(jīng)調(diào)用,并且服務(wù)器返回的頭信息和狀態(tài)碼已經(jīng)收到
5 .3 表示正在接收服務(wù)器傳來的數(shù)據(jù)體body部分。這時(shí),如果實(shí)例的responseType屬性等于text或者空字符串,responseText屬性就會(huì)包含已經(jīng)收到的部分信息
6 . 4 表示服務(wù)器返回的數(shù)據(jù)已經(jīng)完全接收,或本次接收已經(jīng)失敗
7 .通信過程中,每當(dāng)實(shí)例對象發(fā)生狀態(tài)變化,他的readyState屬性就會(huì)改變,這個(gè)值每一次變化,都會(huì)觸發(fā)readyStateChange事件

XMLHttpRequest.onready.statechange

1 .指向一個(gè)監(jiān)聽函數(shù),readystatechange事件發(fā)生時(shí),就會(huì)執(zhí)行這個(gè)屬性
2 .在這個(gè)里面判斷當(dāng)前的狀態(tài),取得返回值

XMLHttpRequest.response

1 .表示服務(wù)器返回的數(shù)據(jù)體,可能是任意的數(shù)據(jù)類型,比如字符串,對象,二進(jìn)制對象等,具體類型由XMLHttpRequest.responseType屬性決定,該屬性只讀
2 .如果本次請求沒有成功或者數(shù)據(jù)不完整,該屬性等于null.但是,如果responseType屬性等于text或空字符串,在請求沒有結(jié)束之前,response屬性包含服務(wù)器已經(jīng)返回的部分?jǐn)?shù)據(jù)
3 .

XMLHttpRequest.responseType

1 .表示服務(wù)器返回?cái)?shù)據(jù)的類型
2 .這個(gè)屬性是可寫的,在open之后,send之前,設(shè)置這個(gè)值,告訴服務(wù)器返回指定類型的數(shù)據(jù)。如果responseType設(shè)為空字符串,就等同于默認(rèn)值text
3 .“”表示服務(wù)器返回文本數(shù)據(jù)
4 .“arraybuffer”表示服務(wù)器返回二進(jìn)制數(shù)組
5 ."blob":表示返回二進(jìn)制對象。圖片文件
6 ."document"返回一個(gè)文檔對象
7 ."json"json對象,瀏覽器自動(dòng)對返回?cái)?shù)據(jù)調(diào)用JSON.parse()方法
8 ."text"字符串

XMLHttpRequest.responseText

1 .屬性返回從服務(wù)器接收的字符串,該屬性為只讀。只有HTTP請求完成以后,該屬性才會(huì)包含完整的數(shù)據(jù)
2 .

XMLHttpRequest.responseXML

1 .返回從服務(wù)器接收到的html或xml文檔對象,該屬性為只讀。如果本次請求沒有成功,或者受到的數(shù)據(jù)不能解析為xml或html,該屬性等于null
2 .該屬性生效的前提是HTTP回應(yīng)的Content-type頭信息等于text/xml或者application/xml。在發(fā)送前XMLHttprequest.responseType屬性要設(shè)為document
3 .如果HTTP回應(yīng)的Content-type頭信息不等于text/xml和application/xml.但是想要從responseXML拿到數(shù)據(jù)需要手動(dòng)調(diào)用XMLHttpRequest.overideMineType()方法,強(qiáng)制進(jìn)行xml解析

XMLHttpRequest.responseURL

1 .表示發(fā)送數(shù)據(jù)的服務(wù)器的網(wǎng)址
2 .這個(gè)屬性的值與open方法指定的請求網(wǎng)址不一定相同,如果服務(wù)器端發(fā)生了跳轉(zhuǎn),這個(gè)屬性返回最后實(shí)際返回?cái)?shù)據(jù)的網(wǎng)址。另外,如果原始的url包括錨點(diǎn),該屬性會(huì)把錨點(diǎn)剝離

XMLHttpRequest.status,XMLHttpRequest.statusText

1 .XMLHttpRequest.status屬性返回一個(gè)整數(shù),表示服務(wù)器端回應(yīng)的HTTP狀態(tài)碼。一般來說,通信成功,這個(gè)狀態(tài)碼返回的是200;
2 .只有2XX,304的狀態(tài)碼,服務(wù)器返回的數(shù)據(jù)是正確的
3 .statusText屬性返回一個(gè)字符串,表示服務(wù)器發(fā)送的狀態(tài)提示。該屬性包含整個(gè)狀態(tài)信息,比如ok,not found.在請求發(fā)送之前,該屬性的值是空字符串,如果服務(wù)器沒有返回狀態(tài)提醒,該屬性的值默認(rèn)為ok,該屬性為只讀屬性
4 .

XMLHttpRequest.timeout

1 .返回一個(gè)整數(shù),表示多少毫秒之后,如果請求任然沒有得到結(jié)果,就自動(dòng)終止。如果該屬性等于0,就表示沒有時(shí)間限制
2 .xhr.ontimeout 用于設(shè)置一個(gè)監(jiān)聽函數(shù),如果發(fā)生timeout事件,就會(huì)執(zhí)行這個(gè)監(jiān)聽函數(shù)

xhr事件監(jiān)聽屬性

1 .xhr.onloadstart
2 .xhr.onprogress(loaded,total,lengthComputeable)
3 .xhr.onabort
4 .xhr.onerror
5 .xhr.onload
6 .xhr.ontimeout
7 .xhr.onloadend:請求完成,不論失敗或成功的監(jiān)聽函數(shù)

XMLHttpRequest.withCredentials

1 .該屬性是一個(gè)布爾值,表示跨域請求時(shí),用戶信息cookie,http頭信息是否會(huì)包含在請求之中,默認(rèn)為false,即跨域請求發(fā)送時(shí),不會(huì)發(fā)送example.com設(shè)置在本機(jī)上的cookie
2 .如果需要跨域請求發(fā)送cookie,需要withCredentials屬性設(shè)為true.同源請求不需要設(shè)置這個(gè)屬性
3 .為了這個(gè)屬性生效,服務(wù)器必須顯示返回Access-control-allow-credentials:true這個(gè)頭信息
4 .腳本總是遵守同源策略,無法從document.cookie或者h(yuǎn)ttp回應(yīng)的頭信息之中,讀取跨域的cookie,withCredentials屬性不影響這一點(diǎn)
5 .

ajax上傳文件

function upload(blobOrFile) {
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/server', true);
  xhr.onload = function (e) {};

  var progressBar = document.querySelector('progress');
  xhr.upload.onprogress = function (e) {
    if (e.lengthComputable) {
      progressBar.value = (e.loaded / e.total) * 100;
      // 兼容不支持 <progress> 元素的老式瀏覽器
      progressBar.textContent = progressBar.value;
    }
  };

  xhr.send(blobOrFile);
}

upload(new Blob(['hello world'], {type: 'text/plain'}));

xhr的實(shí)例方法

1 .open()用于指定http請求的參數(shù),或者說初始化XMLHttpRequest實(shí)例對象

1 .method:表示HTTP動(dòng)詞方法,get,post,put,delete,head
2 .url:表示請求發(fā)送目標(biāo)url
3 .async:表示請求是否為異步,默認(rèn)為true.如果設(shè)置為false,則send方法只有等到服務(wù)器返回了結(jié)果,才會(huì)進(jìn)行下一步操作,該參數(shù)可選。由于同步ajax會(huì)造成瀏覽器失去響應(yīng),許多瀏覽器禁止在主線程使用,只允許在worker里面使用
4 .user:表示用戶認(rèn)證的名字,默認(rèn)為空字符串
5 .password:表適用于認(rèn)證的密碼,默認(rèn)為空字符串

2 .send()方法用于發(fā)出實(shí)際http請求。參數(shù)可選

1 .如果不帶參數(shù),那就是表示是get請求,如果有參數(shù),就表示出了頭信息,還帶有包含具體數(shù)據(jù)的信息體,典型的例子就是POST請求
2 .var xhr = new XMLHttpRequest();
var data = 'email='
  + encodeURIComponent(email)
  + '&password='
  + encodeURIComponent(password);

xhr.open('POST', 'http://www.example.com', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(data);
3 .所有XMLHttpRequest的監(jiān)聽事件,都必須在send方法調(diào)用之前設(shè)定。send方法的參數(shù)就是發(fā)送的數(shù)據(jù)。多種格式的數(shù)據(jù),都可以作為他的參數(shù)

3 .setRequestHeader()

1 .用于設(shè)置瀏覽器發(fā)送http請求的頭信息,必須在open之后,send之前調(diào)用,如果該方法多次調(diào)用,設(shè)定同一個(gè)字段,則每一次調(diào)用的值都會(huì)被合并成一個(gè)單一的值發(fā)送
2 .xhr.setRequestHeader('Content-Type', 'application/json');

XMLHttprequest.overrideMimeType()

1 .用來指定MIME類型,覆蓋服務(wù)器返回的真正的MIME類型,從而讓服務(wù)器進(jìn)行不一樣的處理
2 .假設(shè)服務(wù)器返回的數(shù)據(jù)類型是text/xml,當(dāng)瀏覽器解析不成功報(bào)錯(cuò)的時(shí)候,這時(shí)拿不到數(shù)據(jù),為了拿到原始的數(shù)據(jù),我們可以把MIME類型改成text/plain。這樣瀏覽器就不會(huì)自動(dòng)解析了,從而可以拿到原始文本了
3 .該方法必須在send方法之前調(diào)用
4 .修改服務(wù)器返回的數(shù)據(jù)類型,并不是正常情況下應(yīng)該采取的方法。如果希望服務(wù)器返回指定的數(shù)據(jù)類型,可以使用responseType屬性告訴服務(wù)器。只有在服務(wù)器無法返回某種數(shù)據(jù)類型時(shí),才使用overrideMimeType()方法
5 .

XMLHttpRequest.getResponseHeader()

1 .返回HTTP頭信息指定字符安的值,如果還沒有收到服務(wù)器返回或者指定字段不存在,返回null
2 .如果有多個(gè)字段同名,他們的只會(huì)被連接成為一個(gè)字符串,每個(gè)字段之間使用逗號(hào)+空格分割
3 .

XMLHttpRequest.getAllResponseHeaders

1 .返回一個(gè)字符串,表示服務(wù)器發(fā)來的所有http頭信息,格式為字符串,每個(gè)頭信息之間使用換行分隔

XMLHttpRequest.abrt()

1 .用來終止已經(jīng)發(fā)出的http請求,調(diào)用這個(gè)方法以后,readyState屬性變?yōu)?,status屬性變?yōu)?
2 .

XMLHttprequest實(shí)例的事件

1 .readyStateChange,-onReadyStateChange事件
2 .progress

1 .上傳文件時(shí),xhr實(shí)例對象本身和實(shí)例的upload屬性,都有一個(gè)progress事件,會(huì)不斷返回上傳的進(jìn)度
2 .var xhr = new XMLHttpRequest();

function updateProgress (oEvent) {
  if (oEvent.lengthComputable) {
    var percentComplete = oEvent.loaded / oEvent.total;
  } else {
    console.log('無法計(jì)算進(jìn)展');
  }
}

xhr.addEventListener('progress', updateProgress);

xhr.open();

navigator.sendBeacon()

1 .想在用戶卸載網(wǎng)頁的時(shí)候,向服務(wù)器發(fā)送一些數(shù)據(jù),常見的是pagehide事件回調(diào)里面,使用ajax發(fā)送數(shù)據(jù),但是這樣做的后果就是可能會(huì)發(fā)送不出去,因?yàn)閍jax是異步發(fā)送數(shù)據(jù),很可能在他即將發(fā)送的時(shí)候,頁面就已經(jīng)卸載了,從而導(dǎo)致異步取消或者發(fā)送失敗
2 .上面那個(gè)方法可以保證是異步發(fā)出請求,但是請求和當(dāng)前頁面脫鉤,作為瀏覽器任務(wù),因?yàn)榭梢员WC把數(shù)據(jù)發(fā)出去,不拖延卸載流程
3 .方法使用

window.addEventListener('unload', logData, false);

function logData() {
  navigator.sendBeacon('/log', analyticsData);
}
1 .url,目標(biāo)服務(wù)器的url.
2 .所要發(fā)送的數(shù)據(jù),可以是任意類型(字符串,表單對象,二進(jìn)制對象等)
3 .方法的返回值是一個(gè)布爾值,成功發(fā)送數(shù)據(jù)為true,否則為false
4 .該方法類似于HTTP的post,可以跨域,類似于表單提交,但是不能指定回調(diào)函數(shù)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 偉大的語文 1."錢是沒有問題 ” 就這六個(gè)字的組詞成句,可以變成不同意思的句子!哈哈,偉大的語文能力! 錢是沒有...
    覺之燈閱讀 387評論 0 0
  • 我祈禱一切娑訶眾生幫我去豐臺(tái)區(qū)一個(gè)叫小月灣女子強(qiáng)制隔離戒毒所的地方把一個(gè)圣人接出來,就是我。
    Mahaprabhu閱讀 513評論 0 0
  • 在今天這個(gè)時(shí)代中,作為神的兒女,如果內(nèi)心生命中沒有敬畏神之心,生活中沒有公平、公義之行為,就不配做基督徒。
    紹興虞揚(yáng)明閱讀 353評論 0 1
  • 木蘭詞·擬古決絕詞柬友 [ 清·納蘭性德 ] 人生若只如初見,何事秋風(fēng)悲畫扇。 等閑變卻故人心,卻...
    兼蒼為暮閱讀 319評論 0 7
  • 總是在夜深人靜的時(shí)候想起你,想起你微笑的臉龐,想起你向我點(diǎn)頭招手的模樣,想起你背對著陽光時(shí)那高大的背影,想起你拉著...
    沙漏中的時(shí)光005閱讀 235評論 0 0

友情鏈接更多精彩內(nèi)容