摘要:簡(jiǎn)介對(duì)象可以實(shí)現(xiàn)頁面無刷新來實(shí)現(xiàn)與服務(wù)端進(jìn)行數(shù)據(jù)交互最先有微軟公司設(shè)計(jì),隨后被等使用現(xiàn)在已成為異步請(qǐng)求的標(biāo)準(zhǔn),幾乎所有的瀏覽器都支持此對(duì)象它支持的異步請(qǐng)求協(xié)議包括,,為便于介紹后面我們將的實(shí)例對(duì)象稱作實(shí)例注釋部分可以單個(gè)放開進(jìn)行測(cè)試請(qǐng)求成功
XMLHttpRequest 簡(jiǎn)介
XMLHttpRequest對(duì)象可以實(shí)現(xiàn)頁面無刷新來實(shí)現(xiàn)與服務(wù)端進(jìn)行數(shù)據(jù)交互.最先有微軟公司設(shè)計(jì),隨后被Google,Mozilla等使用.現(xiàn)在已成為異步請(qǐng)求的標(biāo)準(zhǔn),幾乎所有的瀏覽器都支持此對(duì)象.它支持的異步請(qǐng)求協(xié)議包括HTTP,file,ftp.為便于介紹,后面我們將XMLHttpRequest的實(shí)例對(duì)象稱作xhr.
實(shí)例注釋部分可以單個(gè)放開進(jìn)行測(cè)試.
var xhr = new XMLHttpRequest(), method = "GET", url = "https://api.github.com/search/repositories?q=language:javascript&sort=stars&order=desc&page=1&per_page=10"; xhr.open(method, url, true); xhr.responseType = "json"; // xhr.timeout = 1000; // xhr.overrideMimeType("text/xml"); xhr.onreadystatechange = function () { if(xhr.readyState === xhr.DONE) { if(xhr.status === 200){ // 請(qǐng)求成功 console.log(xhr.response); // console.log(JSON.parse(xhr.responseText)); // console.log(xhr.upload); //console.log(xhr.responseXML); //console.log(xhr.responseURL); //console.log(xhr.status); //console.log(xhr.statusText); //console.log("Content-Type:",xhr.getResponseHeader("Content-Type")); //console.log(xhr.responseURL); //console.log(xhr.getAllResponseHeaders()); }else{ // 請(qǐng)求失敗 console.log(xhr.response); } } }; xhr.ontimeout = function(event){ console.log("請(qǐng)求超時(shí)!"); } xhr.setRequestHeader("Content-Type","application/json"); xhr.send(); // xhr.abort(); // 中斷請(qǐng)求屬性 UNSENT,OPEND,HEADERS_RECEIVED,LOADING,DONE
這五個(gè)屬性的值代表xhr.readyState可能存在的值
UNSENT: 值為 0,表示xhr實(shí)例已經(jīng)創(chuàng)建.但尚未執(zhí)行xhr.open()方法.
OPENED: 值為 1,表示xhr.open()已經(jīng)執(zhí)行.
HEADS_RECEIVED: 值為 2,表示xhr.send()已經(jīng)執(zhí)行,服務(wù)端已經(jīng)獲取到請(qǐng)求頭.
LOADING: 值為 3,表示正在接受xhr.responseText,通俗講就是正在獲取服務(wù)端返回的數(shù)據(jù).
DONE: 值為 4,表示整個(gè)請(qǐng)求流程已經(jīng)完成.
onreadystatechange從詞面意思可以了解到此屬性為事件處理程序,當(dāng)xhr.readyState屬性發(fā)生變化時(shí),觸發(fā)此事件.
var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState === xhr.DONE){ if(xhr.status === 200){ console.log("請(qǐng)求成功!"); }else{ console.log("請(qǐng)求失敗!"); } } }readyState
只讀屬性,表示整個(gè)異步請(qǐng)求中的狀態(tài),其存在五個(gè)可能的值.
response只讀屬性,此屬性返回服務(wù)端的響應(yīng)內(nèi)容,客戶端可以通過xhr.responseType指定響應(yīng)內(nèi)容的類型.
responseText只讀屬性,此屬性為xhr.response的一個(gè)特例,返回的響應(yīng)內(nèi)容為text類型.如果指定了xhr.responseType為非text類型,則讀取此屬性時(shí)會(huì)報(bào)錯(cuò).
var xhr = new XMLHttpRequest(), method = "GET", url = "https://api.github.com/search/repositories?q=language:javascript&sort=stars&order=desc&page=1&per_page=10"; xhr.open(method, url, true); xhr.responseType = "json"; xhr.onreadystatechange = function () { if(xhr.readyState === xhr.DONE) { if(xhr.status === 200){ // 請(qǐng)求成功 console.log(xhr.responseText); // 執(zhí)行到這里會(huì)報(bào)錯(cuò) }else{ // 請(qǐng)求失敗 console.log(JSON.parse(xhr.response)); } } }; xhr.send();
由于我們指定了xhr.responseType的值為json,獲取響應(yīng)內(nèi)容用xhr.response就OK了.
responseTyperesponseType定義響應(yīng)內(nèi)容(即xhr.response)的類型,其值為枚舉類型,分別為:arraybuffer,blob,document,json,text.如果傳入的值為空字符串,則默認(rèn)為text.
responseURL返回序列化后的響應(yīng)URL.
responseXML返回被轉(zhuǎn)化為XML格式的響應(yīng)內(nèi)容,以下情況將返回null.
請(qǐng)求不成功
還未執(zhí)行xhr.send()方法
響應(yīng)內(nèi)容不能被轉(zhuǎn)換為XML或者HTML
status返回響應(yīng)的狀態(tài)碼,請(qǐng)求成功返回的狀態(tài)碼為200,狀態(tài)碼存在的可能值列表請(qǐng)點(diǎn)擊狀態(tài)碼列表查看.
statusText返回響應(yīng)的狀態(tài)碼對(duì)應(yīng)的文字描述,例如 200 對(duì)應(yīng) "OK".
timeout設(shè)置請(qǐng)求的超時(shí)毫秒數(shù),當(dāng)請(qǐng)求的時(shí)長(zhǎng)超出了響應(yīng)的毫秒數(shù),請(qǐng)求會(huì)自動(dòng)中斷.如果是在IE瀏覽器中,該屬性的設(shè)置需要在open()方法之后和send()方法之前.
ontimeout此屬性為請(qǐng)求超時(shí)的事件處理程序,請(qǐng)求超時(shí),觸發(fā)此方法.
upload只讀屬性,返回一個(gè)對(duì)象,對(duì)象包含了該xhr可以觸發(fā)的事件.
console.log(xhr.uplaod);withCredentials
此屬性為一個(gè)布爾值,表示是否將驗(yàn)證信息(例如cookie)傳入到header中.此屬性只針對(duì)跨站請(qǐng)求有效.
onprogress,onabort,onerror,onload,onloadend,onloadstart這些屬性是xhr的事件處理程序.
onprogress:可能會(huì)在請(qǐng)求的過程中多次調(diào)用,在監(jiān)測(cè)文件上傳進(jìn)度時(shí)可以使用此屬性.
onerror:請(qǐng)求過程中發(fā)生錯(cuò)誤時(shí)出發(fā)此事件處理程序.
onabort:請(qǐng)求中斷會(huì)觸發(fā)此事件處理處理程序.
onload:請(qǐng)求執(zhí)行成功后會(huì)觸發(fā)此事件處理程序.
onloadstart:請(qǐng)求開始時(shí)觸發(fā)此事件處理程序.
onloadend:請(qǐng)求完成是觸發(fā)此事件處理程序,onload是必須要成功才會(huì)調(diào)用.
方法 abort()中斷當(dāng)前請(qǐng)求,當(dāng)執(zhí)行xhr.send()后此方法才能生效.
getAllResponseHeaders()返回響應(yīng)的header信息(String 類型),以CRLF分割.如果沒有接收到響應(yīng)頭,則返回null.
getResponseHeader(name)獲取某個(gè)header屬性的值,name參數(shù)為需要獲取屬性值的key.如果header對(duì)象不存在此屬性或者獲取header對(duì)象失敗,則返回null.
open(method,url,async)初始化請(qǐng)求,要執(zhí)行請(qǐng)求必選先執(zhí)行此方法.
參數(shù)說明method:HTTP(s)請(qǐng)求方法,例如GET,POST,PUT,DELETE .
url:請(qǐng)求的路徑.
async:是否為異步請(qǐng)求,一般情況我們這個(gè)參數(shù)會(huì)傳true.
ovverideMimeType(mimetype)將服務(wù)端返回的信息強(qiáng)制轉(zhuǎn)化為mimetype類型.
send()發(fā)送請(qǐng)求,如果請(qǐng)求類型為異步請(qǐng)求,send()方法的返回值會(huì)立即返回.
setRequestHeader()設(shè)置HTTP請(qǐng)求頭.此方法需要在open()之后和send()之前執(zhí)行.如果設(shè)置了不被支持的屬性,請(qǐng)求可能會(huì)報(bào)錯(cuò).
var xhr = new XMLHttpRequest(); xhr.setRequestHeader("Content-Type","application/json");兼容性
以上提到的屬性和方法在IE7+,Chorme,Firefox等主流瀏覽器都兼容,其中onprogress,onabort,onerror,onload,onloadend,onloadstart等事件處理程序在IE下需IE10+才能正常運(yùn)行.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/88581.html
摘要:原始數(shù)據(jù)類型引用數(shù)據(jù)類型兩者的區(qū)別值存儲(chǔ)方式不同原始數(shù)據(jù)類型將變量名和值都存儲(chǔ)在棧內(nèi)存中引用數(shù)據(jù)類型將變量名存儲(chǔ)在棧內(nèi)存中,將值存儲(chǔ)在堆內(nèi)存中,并在棧內(nèi)存中存儲(chǔ)值的地址,該地址指向堆內(nèi)存中的值。 類型 1.js中有哪些數(shù)據(jù)類型,并解釋清楚原始數(shù)據(jù)類型和引用數(shù)據(jù)類型 js中共有null,undefined, string,number,boolean,object六種數(shù)據(jù)類型。 原始數(shù)據(jù)...
摘要:因?yàn)檎?qǐng)求是異步的,我們無法獲知請(qǐng)求的進(jìn)度和響應(yīng)狀態(tài),給我們提供了一個(gè)事件,我們可以通過監(jiān)聽這個(gè)時(shí)間來關(guān)注這種變化,所以下一步是注冊(cè)事件。請(qǐng)求還沒有被發(fā)送。方法已調(diào)用,請(qǐng)求已發(fā)送到服務(wù)器。到此,請(qǐng)求準(zhǔn)備完全完成。 上一篇單獨(dú)寫的是ajax跨域,這一篇就來詳細(xì)說一說ajax,ajax是現(xiàn)代web開發(fā)中必不可少的一部分內(nèi)容,非?;A(chǔ)也非常重要,這篇總結(jié)一下到目前為止我對(duì)ajax的理解。 什么...
摘要:因?yàn)檎?qǐng)求是異步的,我們無法獲知請(qǐng)求的進(jìn)度和響應(yīng)狀態(tài),給我們提供了一個(gè)事件,我們可以通過監(jiān)聽這個(gè)時(shí)間來關(guān)注這種變化,所以下一步是注冊(cè)事件。請(qǐng)求還沒有被發(fā)送。方法已調(diào)用,請(qǐng)求已發(fā)送到服務(wù)器。到此,請(qǐng)求準(zhǔn)備完全完成。 上一篇單獨(dú)寫的是ajax跨域,這一篇就來詳細(xì)說一說ajax,ajax是現(xiàn)代web開發(fā)中必不可少的一部分內(nèi)容,非常基礎(chǔ)也非常重要,這篇總結(jié)一下到目前為止我對(duì)ajax的理解。 什么...
摘要:因?yàn)檎?qǐng)求是異步的,我們無法獲知請(qǐng)求的進(jìn)度和響應(yīng)狀態(tài),給我們提供了一個(gè)事件,我們可以通過監(jiān)聽這個(gè)時(shí)間來關(guān)注這種變化,所以下一步是注冊(cè)事件。請(qǐng)求還沒有被發(fā)送。方法已調(diào)用,請(qǐng)求已發(fā)送到服務(wù)器。到此,請(qǐng)求準(zhǔn)備完全完成。 上一篇單獨(dú)寫的是ajax跨域,這一篇就來詳細(xì)說一說ajax,ajax是現(xiàn)代web開發(fā)中必不可少的一部分內(nèi)容,非常基礎(chǔ)也非常重要,這篇總結(jié)一下到目前為止我對(duì)ajax的理解。 什么...
摘要:基于標(biāo)準(zhǔn)被廣泛支持。這樣的類最初是在中作為一個(gè)名為的對(duì)象引入的。請(qǐng)求還沒有被發(fā)送。當(dāng)為,這個(gè)屬性返回目前已經(jīng)接收的響應(yīng)部分。由服務(wù)器返回的狀態(tài)代碼,如表示成功,而表示錯(cuò)誤。方法取消當(dāng)前響應(yīng),關(guān)閉連接并且結(jié)束任何未決的網(wǎng)絡(luò)活動(dòng)。 前言 總括: 本文講解了ajax的歷史,工作原理以及優(yōu)缺點(diǎn),對(duì)XMLHttpRequest對(duì)象進(jìn)行了詳細(xì)的講解,并使用原生js實(shí)現(xiàn)了一個(gè)ajax對(duì)象以方便日常開...
閱讀 2563·2021-11-22 12:05
閱讀 3450·2021-10-14 09:42
閱讀 1685·2021-07-28 00:15
閱讀 1988·2019-08-30 11:08
閱讀 1486·2019-08-29 17:31
閱讀 929·2019-08-29 16:42
閱讀 2337·2019-08-26 11:55
閱讀 2117·2019-08-26 11:49