黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

XMLHttpRequest對象的屬性和方法

系統(tǒng) 2121 0

4.6.2 XMLHttpRequest 對象的屬性和方法

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 ;對于大多數(shù)情況, XMLHttpRequest 對象和 XMLHttp 組件很相似,方法和屬性類似,只是部分屬性不同。例程 4-25 的代碼段顯示了如何在 IE 瀏覽器和 Mozilla 瀏覽器中創(chuàng)建 XMLHttp- Request 對象。

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

<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 對象,某些舊版本使用 Microsoft.XMLHTTP ,而較新的版本則使用 Msxml2.XMLHTTP 。通常,為了保證 Ajax 程序的瀏覽器兼容性,需要注意創(chuàng)建 XMLHttpRequest 對象的程序,要同時支持這兩種創(chuàng)建方式。

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

4-17 XMLHttpRequest 對象屬性

onreadystatechange

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

readyState

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

responseBody

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

responseStream

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

responseText

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

responseXML

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

status

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

" 成功 "

statusText

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

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

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

態(tài)

0

未初始化

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

1

初始化

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

2

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

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

3

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

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

4

傳送完成

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

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

例程 4-26 指定 XMLHttpRequest 對象的回調(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 對象屬性 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 文檔中的編碼聲明,僅將整個 XML 文檔作為字符串返回。

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

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

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

100

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

404

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

101

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

405

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

200

交易成功

406

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

201

提示知道新文件的 URL

407

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

202

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

408

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

203

返回信息不確定或不完整

409

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

204

請求收到,但返回信息為空

410

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

205

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

411

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

206

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

412

一個或多個請求頭字段在當(dāng)前請求中錯誤

300

請求的資源可在多處得到

413

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

301

刪除請求數(shù)據(jù)

414

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

302

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

415

請求資源不支持請求項目格式

303

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

416

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

304

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

417

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

305

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

500

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

307

申明請求的資源臨時性刪除

501

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

400

錯誤請求,如語法錯誤

502

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

401

請求授權(quán)失敗

503

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

402

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

504

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

403

請求不允許

505

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

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

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

4-20 XMLHttpRequest 對象的方法及其含義

abort

取消當(dāng)前請求

getAllResourceHeaders

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

getResourceHeader

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

open

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

send

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

setRequestHeader

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

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

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

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

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

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

4-23 獲取 http 請求頭信息

例程 4-27 sample4_21.htm

<html>

<head>

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

<title>Ch04-- 獲取請求頭信息 </title>

<script language="javascript">

var http_request = false;

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

http_request = false;

// 開始初始化 XMLHttpRequest 對象

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)建對象實例失敗

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

return false;

}

// 確定發(fā)送請求的方式和 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 對象的 open 方法用來新建一個 http 請求,并設(shè)置請求的方法、 URL 以及驗證信息等。其具體語法為:

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

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

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

http_request.send(varBody);

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

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

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

<!-- page -->

XMLHttpRequest對象的屬性和方法


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論