日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

XMLHttpRequest對(duì)象的屬性和方法

系統(tǒng) 1898 0

4.6.2 XMLHttpRequest 對(duì)象的屬性和方法

IE5.0 開始,開發(fā)人員可以在 Web 頁面內(nèi)部使用 XMLHTTP ActiveX 組件擴(kuò)展自身的功能,不用從當(dāng)前的 Web 頁面導(dǎo)航就可以直接將數(shù)據(jù)傳輸?shù)椒?wù)器或者從服務(wù)器接收數(shù)據(jù)。 Mozilla1.0 以及 NetScape7 則是創(chuàng)建繼承 XML 的代理類 XMLHttpRequest ;對(duì)于大多數(shù)情況, XMLHttpRequest 對(duì)象和 XMLHttp 組件很相似,方法和屬性類似,只是部分屬性不同。例程 4-25 的代碼段顯示了如何在 IE 瀏覽器和 Mozilla 瀏覽器中創(chuàng)建 XMLHttp- Request 對(duì)象。

例程 4-25 創(chuàng)建 XMLHttpRequest 對(duì)象

<script language="javascript">

var http_request = false;

//IE  瀏覽器

http_request = new ActiveXObject("Msxml2.XMLHTTP");

http_request = new ActiveXObject("Microsoft.XMLHTTP");

//Mozilla  瀏覽器

http_request = new XMLHttpRequest();

</script>

不同版本的 IE 瀏覽器采用不同方式創(chuàng)建 XMLHttpRequest 對(duì)象,某些舊版本使用 Microsoft.XMLHTTP ,而較新的版本則使用 Msxml2.XMLHTTP 。通常,為了保證 Ajax 程序的瀏覽器兼容性,需要注意創(chuàng)建 XMLHttpRequest 對(duì)象的程序,要同時(shí)支持這兩種創(chuàng)建方式。

X MLHttpRequest 對(duì)象提供了一系列屬性和方法,來向服務(wù)器發(fā)起異步 http 請(qǐng)求,監(jiān) 聽服務(wù) 器的狀態(tài),并在服務(wù)器完成數(shù)據(jù)響應(yīng)處理之后接收服務(wù)器返回的信息數(shù)據(jù)。表 4-1 7 列出了 XMLHttpRequest 對(duì)象的屬性。

4-17 XMLHttpRequest 對(duì)象屬性

onreadystatechange

指定當(dāng) readyState 屬性改變時(shí)的事件處理句柄,屬性為只寫

readyState

返回當(dāng)前請(qǐng)求的狀態(tài),屬性為只讀

responseBody

將回應(yīng)信息正文以 unsigned byte 數(shù)組形式返回,屬性為只讀

responseStream

Ado Stream 對(duì)象的形式返回響應(yīng)信息,屬性為只讀

responseText

以字符串的形式返回服務(wù)器響應(yīng)信息,屬性為只讀

responseXML

將響應(yīng)信息格式化為 XML Document 對(duì)象返回,屬性為只讀

status

返回當(dāng)前 HTTP 請(qǐng)求的狀態(tài)碼,屬性為只讀。如: 404 = " 文件未找到 " 、 200 =

" 成功 "

statusText

返回當(dāng)前 HTTP 請(qǐng)求的狀態(tài)行,屬性為只讀

XMLHttpRequest 對(duì)象屬性 readyState 返回當(dāng)前 XMLHttp 請(qǐng)求的狀態(tài),這些狀態(tài)用長 度為 4 的整形數(shù)據(jù)表示,其屬性的狀態(tài)含義如表 4-18 所示:

4-18 readyState 屬性的狀態(tài)

態(tài)

0

未初始化

對(duì)象已經(jīng)建立,但是未初始化,即尚未調(diào)用 open 方法創(chuàng)建 http 請(qǐng)求

1

初始化

對(duì)象已經(jīng)建立,但是為調(diào)用 send 方法發(fā)送 http 請(qǐng)求

2

發(fā)送數(shù)據(jù)

send 方法已經(jīng)被調(diào)用,但是當(dāng)前的狀態(tài)以及 http 頭未知

3

數(shù)據(jù)傳送中

已經(jīng)接收部分?jǐn)?shù)據(jù),因?yàn)轫憫?yīng)及 http 頭不全,這是通過 response 系列方法獲取部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)錯(cuò)誤

4

傳送完成

數(shù)據(jù)接收完畢,此時(shí)可以通過 response 系列方法獲取完整的回應(yīng)數(shù)據(jù)

XMLHttpRequest 對(duì)象屬性 onreadystatechange readyState 狀態(tài)改變的事件觸發(fā)器,用來指定當(dāng) readyState 屬性發(fā)生改變時(shí)的處理事件。在使用過程中,通常通過將事件處理函數(shù)名稱賦予 onreadystatechange 的方式,來為 XMLHttpRequest 指定事件觸發(fā)器,而在事件處理函數(shù)中判斷 readyState 狀態(tài)值并做相應(yīng)的處理。例程 4-26 的代碼段指定 doState- ReadyHandler 函數(shù)作為事件處理函數(shù),并在 doStateReadyHandler 函數(shù)體內(nèi)在 readyState 狀態(tài)為 4 時(shí)彈出一個(gè)顯示“完成”信息的對(duì)話框。

例程 4-26 指定 XMLHttpRequest 對(duì)象的回調(diào)函數(shù)

var http_request = null;

http_request = new ActiveXObject("Msxml2.XMLHTTP");

function send() {

http_request.onreadystatechange = doStateReadyHandler;

http_request.open("GET","http://localhost/sample.xml",true);

http_request.send();

}

function doStateReadyHandler() {

if(http_request.readySatate==4) window.alert(" 完成 ");

}

XMLHttpRequest 對(duì)象屬性 responseText 將響應(yīng)信息以字符串的形式返回。 XMLHttp- Request 嘗試將響應(yīng)信息解碼為 Unicode 字符串,默認(rèn)的響應(yīng)數(shù)據(jù)編碼方式為 UTF-8 。如果服務(wù)器返回的數(shù)據(jù)帶有 BOM byte-order mark ),則 XMLHttpRequest 可以解碼任何的 UCS-2 或者 UCS-4 數(shù)據(jù)。如果服務(wù)器返回的是 XML 文檔,此屬性不處理 XML 文檔中的編碼聲明,僅將整個(gè) XML 文檔作為字符串返回。

如果服務(wù)器以 XML 文檔的格式返回響應(yīng)數(shù)據(jù),這時(shí)應(yīng)該采用 responseXML 屬性加以處理。如果響應(yīng)數(shù)據(jù)不是有效的 XML 文檔,此屬性本身不返回 XMLDOMParseError ,可以通過處理過的 DOMDocument 對(duì)象獲取錯(cuò)誤信息。在使用 responseXML 將服務(wù)器響應(yīng)數(shù)據(jù)以 XML 文檔的形式返回之前,先要將響應(yīng)的內(nèi)容類型設(shè)置為 application/xml 。

XMLHttpRequest 對(duì)象屬性 status 代表當(dāng)前 http 請(qǐng)求的狀態(tài),為長整型數(shù)據(jù)。其值及其含義如表 4-19 所示。

4-19 http 請(qǐng)求狀態(tài)及其含義

100

客戶必須繼續(xù)發(fā)出請(qǐng)求

404

沒有發(fā)現(xiàn)文件、查詢或 URl

101

客戶要求服務(wù)器根據(jù)請(qǐng)求轉(zhuǎn)換 HTTP 協(xié)議版本

405

用戶在 Request-Line 字段定義的方法不允許

200

交易成功

406

根據(jù)用戶發(fā)送的 Accept 拖,請(qǐng)求資源不可訪問

201

提示知道新文件的 URL

407

類似 401 ,用戶必須首先在代理服務(wù)器上得到授權(quán)

202

接受和處理、但處理未完成

408

客戶端沒有在用戶指定的餓時(shí)間內(nèi)完成請(qǐng)求

203

返回信息不確定或不完整

409

對(duì)當(dāng)前資源狀態(tài),請(qǐng)求不能完成

204

請(qǐng)求收到,但返回信息為空

410

服務(wù)器上不再有此資源且無進(jìn)一步的參考地址

205

服務(wù)器完成了請(qǐng)求,用戶代理必須復(fù)位當(dāng)前已經(jīng)瀏覽過的文件

411

服務(wù)器拒絕用戶定義的 Content-Length 屬性請(qǐng)求

206

服務(wù)器已經(jīng)完成了部分用戶的 GET 請(qǐng)求

412

一個(gè)或多個(gè)請(qǐng)求頭字段在當(dāng)前請(qǐng)求中錯(cuò)誤

300

請(qǐng)求的資源可在多處得到

413

請(qǐng)求的資源大于服務(wù)器允許的大小

301

刪除請(qǐng)求數(shù)據(jù)

414

請(qǐng)求的資源 URL 長于服務(wù)器允許的長度

302

在其他地址發(fā)現(xiàn)了請(qǐng)求數(shù)據(jù)

415

請(qǐng)求資源不支持請(qǐng)求項(xiàng)目格式

303

建議客戶訪問其他 URL 或訪問方式

416

請(qǐng)求中包含 Range 請(qǐng)求頭字段,在當(dāng)前請(qǐng)求資源范圍內(nèi)沒有 range 指示值,請(qǐng)求也不包含 If-Range 請(qǐng)求頭字段

304

客戶端已經(jīng)執(zhí)行了 GET ,但文件未變化

417

服務(wù)器不滿足請(qǐng)求 Expect 頭字段指定的期望值,如果是代理服務(wù)器,可能是下一級(jí)服務(wù)器不能滿足請(qǐng)求

305

請(qǐng)求的資源必須從服務(wù)器指定的地址得到

500

服務(wù)器產(chǎn)生內(nèi)部錯(cuò)誤

307

申明請(qǐng)求的資源臨時(shí)性刪除

501

服務(wù)器不支持請(qǐng)求的函數(shù)

400

錯(cuò)誤請(qǐng)求,如語法錯(cuò)誤

502

服務(wù)器暫時(shí)不可用,有時(shí)是為了防止發(fā)生系統(tǒng)過載

401

請(qǐng)求授權(quán)失敗

503

服務(wù)器過載或暫停維修

402

保留有效 ChargeTo 頭響應(yīng)

504

關(guān)口過載,服務(wù)器使用另一個(gè)關(guān)口或服務(wù)來響應(yīng)用戶,等待時(shí)間設(shè)定值較長

403

請(qǐng)求不允許

505

服務(wù)器不支持或拒絕支請(qǐng)求頭中指定的 HTTP 版本

在這些狀 態(tài)中,最常用到的是“ 404 ”。通常,在類似例子 4-20 doStateReady Handler 的事件處理函數(shù)中,判斷 status 的狀態(tài),然后做相應(yīng)的處理。

XM LHttpRequest 對(duì)象提供了包括 send 、 open 在內(nèi)的六種方法,用來向服務(wù)器發(fā)送 http 請(qǐng)求,并設(shè)置相應(yīng)的頭信息。表 4-20 列出 XMLHttpRequest 對(duì)象提供的方法及其含義。

4-20 XMLHttpRequest 對(duì)象的方法及其含義

abort

取消當(dāng)前請(qǐng)求

getAllResourceHeaders

獲取相應(yīng)的全部 http 頭信息

getResourceHeader

從響應(yīng)信息中獲取指定的 http 頭信息

open

創(chuàng)建一個(gè)新的 http 請(qǐng)求,并指定此請(qǐng)求的方法、 URL 、以及驗(yàn)證信息(用戶名 / 密碼)

send

發(fā)送請(qǐng)求到 http 服務(wù)器并接收回應(yīng)

setRequestHeader

單獨(dú)設(shè)定請(qǐng)求的某個(gè) http

abort 的語法為: http_request.abort(); 調(diào)用此方法,當(dāng)前請(qǐng)求返回 UNINITIALIZED 狀態(tài)。

方法 getAllResourceHeaders JSP 中的 HttpServletRequest 對(duì)象一樣,獲取 http 請(qǐng)求的請(qǐng)求頭信息。其語法為: headers = http_request.getAllResourceHeaders();

相對(duì), getResourceHeader 方法則是獲取某個(gè)指定的 http 頭信息,傳入的參數(shù)為這個(gè)頭信息的名稱,其語法為: header = http_request.getResourceHeader(“header-name”);

getAllResourceHeaders getResourceHeader 這兩種方法,必須等到 http 請(qǐng)求發(fā)送成功即 send 方法成功執(zhí)行之后才能夠執(zhí)行,否則會(huì)報(bào)錯(cuò)。

例程 4-27 使用 getAllResourceHeaders getResourceHeader 兩種方法取得相應(yīng)的頭信息,并將這些信息以彈出對(duì)話框的形式顯示出來。其執(zhí)行效果如圖 4-23 所示。

4-23 獲取 http 請(qǐng)求頭信息

例程 4-27 sample4_21.htm

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>Ch04-- 獲取請(qǐng)求頭信息 </title>

<script language="javascript">

var http_request = false;

function send_request() {// 初始化、指定處理函數(shù)、發(fā)送請(qǐng)求的函數(shù)

http_request = false;

// 開始初始化 XMLHttpRequest 對(duì)象

if(window.XMLHttpRequest) { //Mozilla 瀏覽器

http_request = new XMLHttpRequest();

if (http_request.overrideMimeType) {// 設(shè)置 MiME 類別

http_request.overrideMimeType('text/xml');

}

}

else if (window.ActiveXObject) { // IE 瀏覽器

try {

http_request = new ActiveXObject("Msxml2.XML HTTP");

} catch (e) {

try {

http_request = new ActiveXObject("Microsoft. XMLHTTP");

} catch (e) {}

}

}

if (!http_request) { // 異常,創(chuàng)建對(duì)象實(shí)例失敗

window.alert(" 不能創(chuàng)建 XMLHttpRequest 對(duì)象實(shí)例 .");

return false;

}

// 確定發(fā)送請(qǐng)求的方式和 URL 以及是否異步執(zhí)行下段代碼

http_request.open("GET","sample4_19.htm", false);

http_request.send(null);

window.alert(" 全部頭信息如下: /n"+http_request.getAll Response Headers() +

"/n"+" 頭信息編碼類型: /n"+http_request.getResponseHeader ("Content-Type"));

}

</script>

</head>

<body>

<input type="button" name="button" value=" 顯示頭信息 " onClick="send_ request()">

</body>

</html>

XMLHttpRequest 對(duì)象的 open 方法用來新建一個(gè) http 請(qǐng)求,并設(shè)置請(qǐng)求的方法、 URL 以及驗(yàn)證信息等。其具體語法為:

http_request.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);

bstrMethod 代表 http 方法,可選值為 POST 、 GET 、 PUT PROPFIND ,大小寫不敏感。 bstrUrl 為請(qǐng)求的目標(biāo) URL 地址,可以是絕對(duì)地址也可以是相對(duì)地址。 varAsync 為布爾型參數(shù),指定該請(qǐng)求是否為異步方式,默認(rèn)為 true ;如果為真,當(dāng) state 狀態(tài)改變時(shí)會(huì)調(diào)用 onreadystatechange 屬性指向的回調(diào)函數(shù)。如果服務(wù)器需要驗(yàn)證,則應(yīng)該指定 bstrUser 參數(shù)為要驗(yàn)證的用戶名, bstrPassword 參數(shù)為要驗(yàn)證的密碼。如果 bstrUser 、 bstrPassword 參數(shù)不指定,則在服務(wù)器需要驗(yàn)證的時(shí)候,會(huì)彈出驗(yàn)證對(duì)話框。

創(chuàng)建 http 請(qǐng)求之后,就可以向服務(wù)器發(fā)送 http 請(qǐng)求, send 方法被調(diào)用,其語法為:

http_request.send(varBody);

參數(shù) varBody 為要發(fā)送給服務(wù)器的內(nèi)容。如果沒有內(nèi)容要發(fā)送, varBody 參數(shù)可以省 略。此方法的同步或異步方式取決于 open 方法中的 varAsync 參數(shù),如果 varAsync False , 此方法將會(huì)等待請(qǐng)求完成或者超時(shí)時(shí)才會(huì)返回,如果 varAsync True ,此方法將立即返回。如果發(fā)送的數(shù)據(jù)為 BSTR ,則回應(yīng)被編碼為 UTF-8 ,必須在適當(dāng)位置設(shè)置一個(gè)包含 charset 的文檔類型頭。如果發(fā)送的數(shù)據(jù)為 XML DOM object ,則回應(yīng)將被編碼為在 xml 文檔中聲明的編碼,如果在 xml 文檔中沒有聲明編碼,則使用默認(rèn)的 UTF-8 。

Ajax 應(yīng)用程序中,有兩種方法可以向服務(wù)器發(fā)送請(qǐng)求內(nèi)容。一種是以“ & 內(nèi)容名稱 = 內(nèi)容值”的形式直接附加在目標(biāo) URL 后面,通過 open() 方法設(shè)置發(fā)送內(nèi)容。另外一種是將要發(fā)送的內(nèi)容作為 send() 方法的參數(shù),內(nèi)容名稱及其值也是成對(duì)出現(xiàn)的,中間用 & 字符隔開。

來自: http://book.csdn.net/bookfiles/159/1001596832.shtml

<!-- page -->

XMLHttpRequest對(duì)象的屬性和方法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!??!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 壤塘县| 彰化市| 林周县| 泽普县| 凉城县| 五指山市| 宁陵县| 会同县| 沂源县| 依安县| 湟源县| 兴仁县| 惠州市| 鄯善县| 双牌县| 凭祥市| 邵武市| SHOW| 永泰县| 华坪县| 阳曲县| 资源县| 同德县| 河曲县| 通城县| 甘德县| 建水县| 原平市| 额济纳旗| 镇赉县| 浮梁县| 大足县| 社旗县| 凤台县| 西乌珠穆沁旗| 富锦市| 东乡族自治县| 永兴县| 大厂| 鹿邑县| 北宁市|