title: 《鋒利的jQuery》八、XMLHttpRequest對(duì)象
date: 2017-08-15 21:35:00
tags: 鋒利的jQuery
XMLHttpRequest對(duì)象是Ajax的核心,它有許多的屬性、方法和事件以便于js處理和控制HTTP的請(qǐng)求與響應(yīng)。
readyState屬性
當(dāng)一個(gè)XMLHttpRequest被創(chuàng)建后,通過(guò)readyState屬性可以查看此次請(qǐng)求的狀態(tài)。
| 值 | 說(shuō)明 |
|---|---|
| 0 | 初始化狀態(tài):此時(shí),已經(jīng)創(chuàng)建了一個(gè)XMLHttpRequest對(duì)象,但是沒(méi)有初始化。 |
| 1 | 準(zhǔn)備發(fā)送狀態(tài):已經(jīng)調(diào)用了open()方法,并且XMLHttpRequest對(duì)象已經(jīng)準(zhǔn)備好將一個(gè)請(qǐng)求發(fā)送到服務(wù)器。 |
| 2 | 已發(fā)送狀態(tài):已經(jīng)通過(guò)send()方法把一個(gè)請(qǐng)求發(fā)送到服務(wù)器端。 |
| 3 | 正在接受狀態(tài):已經(jīng)接到HTTP的響應(yīng)頭部信息,但是消息體部分還沒(méi)有完全接收到。 |
| 4 | 完成響應(yīng)狀態(tài):已經(jīng)完成了HttpResponse響應(yīng)的接收。 |
responseText屬性
包含客戶(hù)端接收到的HTTP響應(yīng)的文本內(nèi)容。readyState為0、1、2時(shí)是一個(gè)空字符串,readyState為3時(shí)響應(yīng)中包含客戶(hù)端還未完成的響應(yīng)信息,readyState為4時(shí)才是完整的信息。
responseXML屬性
只有當(dāng)readyState為4時(shí),并且響應(yīng)頭部的Content-Type的MIME類(lèi)型被指定為XML(text/xml)時(shí),該屬性才會(huì)有值并且被解析為一個(gè)XML文檔。
status屬性
描述了HTTP的狀態(tài)碼,只有在readyState為3或者4時(shí)才可以使用該屬性,否則會(huì)報(bào)錯(cuò)。
statusText屬性
和上面相同,只是描述了HTTP的狀態(tài)碼文本,而不只是狀態(tài)碼。
open()方法
XMLHttpRequest對(duì)象是通過(guò)調(diào)用open()方法來(lái)進(jìn)行初始化工作的。調(diào)用該方法將得到一個(gè)可以用來(lái)進(jìn)行發(fā)送的對(duì)象。
該方法有五個(gè)參數(shù) open(method,uri,async,username,password)。
method:該參數(shù)是必須提供的,用于確定GET發(fā)送還是POST發(fā)送,該參數(shù)要大寫(xiě)。uri:用于指定XMLHttpRequest對(duì)象把請(qǐng)求發(fā)送到的服務(wù)器相應(yīng)的URI。async:用于指定是否請(qǐng)求是異步的,默認(rèn)值是true,發(fā)送同步請(qǐng)求需要設(shè)置為false。如果服務(wù)器要驗(yàn)證訪問(wèn)用戶(hù)的情況,那么可以設(shè)置
username及password。
send()
調(diào)用send()方法可以將open()方法設(shè)定的參數(shù)請(qǐng)求進(jìn)行發(fā)送。send()方法在readyState屬性值為1時(shí),即是在open()之后才可以調(diào)用。
send()的參數(shù)可以作為POST方式發(fā)送的參數(shù),在調(diào)用send()之前,先使用setRequestHeader()方法設(shè)置Content-Type的頭部。
abort()方法
該方法可以暫停一個(gè)HttpRequest的請(qǐng)求發(fā)送或者HttpResponse的接收,并將XMLHttpRequest設(shè)置為初始化狀態(tài)。
setRequestHeader()方法
用來(lái)設(shè)置頭部信息,當(dāng)readyState屬性值為1時(shí),可以在調(diào)用open()方法后調(diào)用這個(gè)方法,該方法的格式為:setRequestHeader(header, value)。
getRequestHeader()方法
檢索響應(yīng)的頭部值,僅當(dāng)readyState值為3或者4時(shí)才可以調(diào)用這個(gè)方法,否則會(huì)返回一個(gè)空字符串。