摘要:使用此事件就沒必要再通過檢查來確認(rèn)響應(yīng)完成了。不過事件只是表示接收到服務(wù)器的響應(yīng),還需要通過來判斷響應(yīng)是否成功。
HTML5 更新了很多API,XMLHttpRequest 就是其中一個(gè)。level 2 的XMLHttpRequest 更加強(qiáng)大了。
新建對(duì)象var xhr = new XMLHttpRequst()
和之前一樣
先看老幾樣屬性
onreadystatechange 同步ajax不可用此事件回調(diào),abort() 也不會(huì)觸發(fā)此事件,open() 之前設(shè)置
readyState 只讀
responseText 只讀
responseXML
responseURL
status
statusText
新屬性
responseType 設(shè)置響應(yīng)類型,可以是 arraybuffer / blob / document / json / text ,默認(rèn)是 text
response 響應(yīng)內(nèi)容
timeout 超時(shí)毫秒數(shù),同步請(qǐng)求不可用。默認(rèn)是0,永不超時(shí)。在 open() 和 send() 之間設(shè)置,超時(shí)會(huì)觸發(fā) xhr 的 timeout 事件
upload 只讀,ajax 上傳對(duì)象,后面詳細(xì)講
withCredentials Boolean,是否允許跨域響應(yīng)設(shè)置cookie,默認(rèn)是 false
abort() 觸發(fā) abort 事件
getAllResponseHeaders() 返回所有響應(yīng)頭部組成的字符串
getResponseHeader(key)
open(method, url)
overrideMimeType(mimetype) 重寫響應(yīng)類型,如果需要的話,在 send() 之前調(diào)用
send() 可以發(fā)送 FormData / Blob / Buffer / String / Document,不發(fā)送數(shù)據(jù)的話,建議使用 xhr.send(null)
setRequestHeader(key, value) 設(shè)置請(qǐng)求頭,在 open() 和 send() 之間調(diào)用。如果沒有設(shè)置 Accept, 則默認(rèn)是 */*
事件loadstart send() 之后觸發(fā),只觸發(fā)一次
progress 進(jìn)度事件,會(huì)不斷被觸發(fā)
xhr.addEventListener("progress", ev => { if (ev.lengthComputable) { console.log(ev.loaded / ev.total); } }); ev.lengthComputable 長度可計(jì)算 ev.loaded 接收的字節(jié)數(shù) ev.total 總字節(jié)數(shù) // 可以使用 "onprogress" in xhr 判斷瀏覽器是否支持 progress 事件
load 響應(yīng)完成時(shí)觸發(fā)。使用此事件就沒必要再通過檢查 xhr.readyState === 4 來確認(rèn)響應(yīng)完成了。不過 load 事件只是表示接收到服務(wù)器的響應(yīng),還需要通過 xhr.status 來判斷響應(yīng)是否成功。
error
abort xhr.abort() 觸發(fā)
timeout 設(shè)置 xhr.timeout 之后,響應(yīng)超時(shí)時(shí)觸發(fā)
xhr.upload 是 ajax 上傳對(duì)象
xhr.upload 也有以下事件
progress
load
error
abort
xhr.upload.onprogress 和 xhr.onprogress 使用差不多,只是一個(gè)針對(duì)文件上傳過程,一個(gè)針對(duì)從服務(wù)器獲取響應(yīng)的過程
表單數(shù)據(jù)類型
var form = new FormData(); form.append("username", "xiaoming"); 或者 var form = new FormData(document.getElementsByTagName("form")[0]); // 使用 FormData,不用設(shè)置請(qǐng)求的 Content-Type,xhr 能夠自動(dòng)識(shí)別并設(shè)置 // 如果不使用 FormData,發(fā)送表單需要先設(shè)置 Content-Type 為 `application/x-www-form-urlencoded`, 如果表單中有文件需要上傳,則 Content-Type 為 `multipart/form-data` xhr.send(form); // 如果只是上傳文件,可以直接使用 `xhr.send(file)`
綜上所述,使用 ajax 時(shí),步驟如下:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {}; level2 幾乎可以不用了
xhr.open();
xhr 的相關(guān)設(shè)置,比如 事件監(jiān)聽,請(qǐng)求頭設(shè)置,響應(yīng)頭改寫等
xhr.send();
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80896.html
摘要:年初,許多事件使得被大眾所接受。這使得應(yīng)用程序更為迅捷地響應(yīng)用戶交互,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變的信息,減少用戶等待時(shí)間,帶來非常好的用戶體驗(yàn)。調(diào)用方法后立即觸發(fā),若未被調(diào)用則不會(huì)觸發(fā)此事件。 了解Ajax的起源、概念及特點(diǎn) 起源 該技術(shù)在1998年前后得到了應(yīng)用。允許客戶端腳本發(fā)送HTTP請(qǐng)求(XMLHTTP)的第一個(gè)組件由Outlook Web Access小組寫成。該組...
摘要:年初,許多事件使得被大眾所接受。這使得應(yīng)用程序更為迅捷地響應(yīng)用戶交互,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變的信息,減少用戶等待時(shí)間,帶來非常好的用戶體驗(yàn)。調(diào)用方法后立即觸發(fā),若未被調(diào)用則不會(huì)觸發(fā)此事件。 了解Ajax的起源、概念及特點(diǎn) 起源 該技術(shù)在1998年前后得到了應(yīng)用。允許客戶端腳本發(fā)送HTTP請(qǐng)求(XMLHTTP)的第一個(gè)組件由Outlook Web Access小組寫成。該組...
摘要:年初,許多事件使得被大眾所接受。這使得應(yīng)用程序更為迅捷地響應(yīng)用戶交互,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變的信息,減少用戶等待時(shí)間,帶來非常好的用戶體驗(yàn)。調(diào)用方法后立即觸發(fā),若未被調(diào)用則不會(huì)觸發(fā)此事件。 了解Ajax的起源、概念及特點(diǎn) 起源 該技術(shù)在1998年前后得到了應(yīng)用。允許客戶端腳本發(fā)送HTTP請(qǐng)求(XMLHTTP)的第一個(gè)組件由Outlook Web Access小組寫成。該組...
摘要:今天來談?wù)勄岸嗣嬖囍谢旧厦看我幻娴臅r(shí)候都會(huì)被問到的一個(gè)問題,那就是的新特性。新表單元素元素,表示電話號(hào)碼。和通過設(shè)置和特性,可以將輸入框的數(shù)值輸入范圍限定在最低值和最高值之間。一旦為某輸入型控件設(shè)置了特性,那么此項(xiàng)必填,否則無法提交表單。 今天來談?wù)勄岸嗣嬖囍谢旧厦看我幻娴臅r(shí)候都會(huì)被問到的一個(gè)問題,那就是html5的新特性。這個(gè)是學(xué)習(xí)前端必須掌握的基礎(chǔ)知識(shí)。 新增的元素 html5...
閱讀 3179·2021-11-22 09:34
閱讀 2596·2021-09-30 09:47
閱讀 1504·2021-09-03 10:32
閱讀 3821·2021-08-16 10:49
閱讀 1850·2019-08-30 15:55
閱讀 2537·2019-08-30 15:52
閱讀 3381·2019-08-30 15:44
閱讀 1427·2019-08-30 15:44