首頁  >  文章  >  web前端  >  XMLHttpRequest物件中關於Ajax非同步請求的問題

XMLHttpRequest物件中關於Ajax非同步請求的問題

一个新手
一个新手原創
2017-09-28 09:12:231407瀏覽

 XMLHttpRequest物件

一、XMLHttpRequest物件

##1.Ajax能夠是實現異步傳輸,所依賴的就是JavaScript中的XMLHttpRequest

2.XMLHttpRequest對像是XMLHttp元件的對象,它是一個抽象對象,允許腳本從伺服器取得傳回的eXML資料或將資料傳送到伺服器端

3.XMLHttpRequest可以實現客戶端與伺服器只進行資料層面的交互,不必每次刷新頁面

4.XMLHttpRequest最早在Microsoft Internet Explorer5.0中作為一個ActiveX控件提供,後受到廣泛應用

5.

在使用XMLHttpRequest發送請求和處理對應之前需要先建立一個XMLHttpRequest物件

6.XMLHttpRequest不是W3C標準,可採用多種方法用JavaScript來建立XMLHttpRequest實例

7.

IE中XMLHttpRequest實作為一個ActiveX控件,而其他瀏覽器則實作為一個JavaScript內建物件

#二、XMLHttpRequest物件建立

eaea58db2af5d43982d9104387dffa1a 三、XMLHttpRequest物件屬性(接收並顯示目前狀態)

1.readySate-記錄傳回請求的狀態

0-為初始化:物件已經建立,單位初始化,open方法還未呼叫;

1-初始化:物件已經建立,但還未呼叫send方法發送請求;

2-發送資料:send方法已調用,但HTTP頭未知;

3-數據傳輸中:已經接受部分數據,但回應不完全;

4-完成:資料接受完成,此時才可以取得完整的回傳資料

2.responseText-接收客戶端的HTTP回應的文字內容

。只讀

。當readySate為1/2,responseText值是一個空字串;

。當readyState為3,回應訊息正在接受還未完成;

。當readyState為4,表示可以回應訊息已經接收完成

xmlHttp預設回應資料編碼為UTF-8

3.responseXML-在send()執行後,將傳回的訊息格式化為XML Document物件

#。 Content-Type指定的MIME類型應該是text/HTML

。如果Content-Type不包含這種類型,responseXML在接收時將會得到一個null值

4.status-在send()執行後,可使用status讀取事物狀態

。長整型資料

。傳回目前請求的HTTP的狀態碼

。只有當readyState為3或4時才使用該屬性,否則讀取status會發生錯誤

100-客戶必須繼續發送請求

200-交易成功

400-錯誤請求

403-請求不允許

404-沒有發現檔案、查詢、URL

500-伺服器內部錯誤

502伺服器暫時無法使用

505-伺服器不支援或拒絕不支援請求頭中的HTTP版本

5.statusText-send()執行後,可透過statusText讀取事物狀態

。傳回目前HTTP請求的狀態行

。只有當readyState為3或4時才可使用該屬性,否則讀取state會發生錯誤

6.Onreadystatechange-readyState發生變更時所要執行的動作

#。通常將處理函數名稱賦予onreadystatechange來為XMLHttpRequest物件指定事件處理

。在事件處理函數中根據readyState的狀態值進行對應的處理

。範例:

function test(){
xmlHttp.onreadystatechange=showInfo;
var url=”/ajax/urlInfo”;//请求路径
xmlHttp.open(“GET”,url,true);
xmlHttp.send(null);
}
Function showInfo(){
If(xmlHttp.readyState==4){
alert(“success”);
}
}

四、XMLHttpRequest物件方法(動態處理各種資訊:資料的傳送與接收、請求與回應的處理等)

1.abort()-終止目前操作

。停止XMLHttpRequest物件對HTTP的請求,把該物件恢復到初始狀態

2.open()-xmlHttp.open(method,url,mode,user,pwd)

。建立一個新的HTTP請求,並指定該請求的方法、URL、驗證資訊等

#。 method:POST、GET、PUT(可忽略大小寫)

url:請求的目標位址

mode:指定請求是否為非同步,預設true;當為true時,當state的狀態改變時會呼叫onreadystatechange屬性所指定的處理函數

。呼叫open()後,XMLHttpRequest物件將readyState屬性設為1並恢復responseText、responseXML、status、statusText等屬性的初始值,且重設請求頭部資訊

呼叫 #open()時,readyState為4,則XMLHttpRequest物件將重設以上的值

3.send()-xmlHttp.send(content)

。發送請求到伺服器並接受回應

4.setRequestHeader()-setRequestHeader(header,value)

。單獨設定某個請求的HTTP頭資訊

。當readyState為1時,可在send()後呼叫此方法,否則傳回一個異常

。如果已經存在該名稱的HTTP頭,則將原始資訊覆寫

header-頭名稱:字串型

value-頭名稱的值:字串型

5.getResponseHeader()-讀取伺服器發出訊息的頭部

HEAD請求忽略內容,所以其回應比對GET或POST回應小

取得內容:

Content-Type:內容類型

Content-Length:內容長度

Last-Modify:最後一次修改的日期

#。例:function getHeadInfo(){

if(xmlHttp.readyState==4){
if(headeyType==”Content-Type”){
window.alert(“Content-Type:”+xmlHttp.getResponseHeader(“Content-Type”);
}
else if(headType==”Content-Length”){
window.alert(“Content-Length:”+xmlHttp,getResponseHeader(“Content-Length”);
}
else if(headType==”Last-Modify”){
window.alert(“Last-Modify:”+xmlHttp.getResponseHeader);
}
}
}

。在獲取頭部資訊時,並不是所有資訊都能取得

6.getAllResponseHeaders()-取得所有頭部資訊

。在获取时只用HEAD即可获取

。例:fuction headRequest(){

creatXMLHttpRequest();
xmlHttp.onreadystatechange=getHeadInfo;
xmlHttp.open(“HEAD”,”url”,false);
xmlHttp.send(null);
}
function getHeadInfo(){
if(readyState==4){
Alter(xmlHttp.getAllResponseHeaders());
}

以上是XMLHttpRequest物件中關於Ajax非同步請求的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn