XMLHttpRequest(XHR)
Ø 瀏覽器可以直接從JavaScript中初始化請求并獲取結果。
Ø 本質上是添加了額外的用于發送和接收XML代碼功能的普通HTTP請求。
Ø 像一個 ServletRequest
XMLHttpRequest對象的屬性和事件
Ø XMLHttpRequest對象的屬性
屬性名稱 |
描述 |
onreadystatechange |
指定當readyState屬性改變時的事件處理句柄,只寫 。 |
readyState |
返回當前請求的狀態,只讀。 |
responseBody |
將回應信息正文以unsigned byte數組形式返回,只讀。 |
responseStream |
以Ado Stream對象的形式返回響應信息,只讀 。 |
responseText |
將響應信息作為字符串返回,只讀 。 |
responseXML |
將響應信息格式化為Xml Document對象并返回,只讀 。 |
status |
返回當前請求的http狀態碼,只讀 。 |
statusText |
返回當前請求的響應行狀態,只讀 。 |
XMLHttpRequest對象的方法
Ø XMLHttpRequest對象的方法
方法名稱 |
描述 |
abort |
取消當前請求 |
getAllResponseHeaders |
獲取響應的所有http頭 |
getResponseHeader |
從響應信息中獲取指定的http頭 |
open |
創建一個新的http請求,并指定此請求的方法、URL以及驗證信息(用戶名/密碼) //常用 |
send |
發送請求到http服務器并接收回應 //常用 |
setRequestHeader |
單獨指定請求的某個http頭 |
XMLHttpRequest對象的readyState屬性
Ø ReadyState屬性
屬性名稱 |
描述 |
0 (未初始化) |
對象已建立,但是尚未初始化(尚未調用open方法) |
1 (初始化) |
對象已建立,尚未調用send方法 |
2 (發送數據) |
send方法已調用,但是當前的狀態及http頭未知 |
3 (數據傳送中) |
已接收部分數據,因為響應及http頭不全,這時通過responseBody和responseText獲取部分數據會出現錯誤 |
4 (完成) |
數據接收完畢,此時可以通過通過responseBody和responseText獲取完整的回應數據 |
XMLHttpRequest對象的onreadystatechange事件
Ø 每個狀態改變時都會觸發這個事件處理器,通常會調用一個JavaScript 函數。
Ø 語法
onreadystatechang 指定當readyState屬性改變時的事件處理句柄,只寫 xmlHttpObj.onreadystatechange=callback; function callback (){ if(xmlHttpObj.readyState==4){ if(xmlHttpObj.stateus==200){ alert(xmlHttpObj.responseText); }else{ alert("加載失敗!"n原因:"+xmlHttpObj.stateText); } } } |
XMLHttpRequest對象的responseText屬性
Ø 服務器的響應,表示為一個串。
Ø 客戶端接收到的HTTP響應的文本內容。
Ø 當readyState值為0、1或2時,responseText包含一個空字符串。
Ø 當readyState值為3(正在接收)時,響應中包含客戶端還未完成的響應信息。
Ø 當readyState為4(已加載)時,該responseText包含完整的響應信息。
XMLHttpRequest對象的responseXML屬性
Ø 服務器的響應,表示為XML。
Ø 用于當接收到完整的HTTP響應時(readyState為4)描述XML響應。
Ø Content-Type頭部指定MIME(媒體)類型為text/xml,application/xml或以+xml結尾。
Ø 如果Content-Type頭部并不包含這些媒體類型之一,那么responseXML的值為null。
Ø 無論何時,只要readyState值不為4,那么該responseXML的值也為null。
Ø responseXML可以返回一個文檔樹(DOM),可以使用document.getElementsByTagName,document.getElementsByTagNameNS,document.getElementById等對其操作。
XMLHttpRequest對象的status屬性
Ø 長整形標準http狀態碼。
Ø 僅當readyState值為3(正在接收中)或4(已加載)時,這個status屬性才可用。
Ø 當readyState的值小于3時試圖存取status的值將引發一個異常。
Ø 狀態碼如下定義:
值 |
描述 |
100 |
Continue |
101 |
Switching protocols |
200 |
OK |
201 |
Created |
202 |
Accepted |
203 |
Non-Authoritative Information |
204 |
No Content |
205 |
Reset Content |
206 |
Partial Content |
300 |
Multiple Choices |
301 |
Moved Permanently |
302 |
Found |
303 |
See Other |
304 |
Not Modified |
305 |
Use Proxy |
307 |
Temporary Redirect |
400 |
Bad Request |
401 |
Unauthorized |
402 |
Payment Required |
403 |
Forbidden |
404 |
Not Found |
405 |
Method Not Allowed |
406 |
Not Acceptable |
407 |
Proxy Authentication Required |
408 |
Request Timeout |
409 |
Conflict |
410 |
Gone |
411 |
Length Required |
412 |
Precondition Failed |
413 |
Request Entity Too Large |
414 |
Request-URI Too Long |
415 |
Unsupported Media Type |
416 |
Requested Range Not Suitable |
417 |
Expectation Failed |
500 |
Internal Server Error |
501 |
Not Implemented |
502 |
Bad Gateway |
503 |
Service Unavailable |
504 |
Gateway Timeout |
505 |
HTTP Version Not Supported |
XMLHttpRequest對象的statusText屬性
Ø 描述了HTTP狀態代碼文本。
Ø 僅當readyState值為3或4才可用。
Ø 當readyState為其它值時試圖存取statusText屬性將引發一個異常。
Ø 返回當前請求的響應行狀態
XMLHttpRequest對象的abort()方法
Ø 暫停與一個XMLHttpRequest對象相聯系的HTTP請求。
Ø 從而把該對象復位到未初始化狀態。
Ø 用來中斷請求,取消當前請求。
XMLHttpRequest對象的open()方法
Ø void open(string method, string url, boolean asynch, string username, string password) 建立對服務器的連接,初始化一個XHR對象的純腳本方法。
1. ethod參數: 是必須提供的-指定發送請求的HTTP方法(GET,POST,PUT,DELETE或HEAD)。
2. uri參數: 用于指定請求發送到的服務器相應的URI。
3. async參數: 指定請求是否是異步的,預設是true,表示使用非同步方式。為了發送一個同步請求,需要把這個參數設置為false。
Ø 對于要求認證的服務器,提供可選的用戶名和口令參數。
Ø 在調用open()方法后,XMLHttpRequest對象把readyState屬性設置為1(打開)。
Ø 并且把responseText、responseXML、status和statusText屬性復位到它們的初始值。
XMLHttpRequest對象的send()方法
Ø 向服務器發送請求。
Ø 僅當readyState值為1時,才可以調用send()方法;否則的話,XHR對象將引發一個異常。
Ø 當async參數為true時,send()方法立即返回,從而允許其它客戶端腳本繼續處理。
Ø 在調用send()方法后,XHR對象把readyState的值設置為2(發送)。
Ø 當服務器響應時,在接收消息體之前,如果存在任何消息體的話,XHR對象將把readyState設置為3(正在接收中)。
Ø 當請求完成加載時,它把readyState設置為4(已加載)。
Ø 對于一個HEAD類型的請求,它將在把readyState值設置為3后再立即把它設置為4。
Ø send()方法使用一個可選的參數-該參數可以包含可變類型的數據。
Ø 通過POST方法把數據發送到服務器。
Ø 可以顯式地使用null參數調用send()方法,這與不用參數調用它一樣。
Ø 對于大多數其它的數據類型,在調用send()方法之前,應該使用setRequestHeader()方法先設置Content-Type頭部。
Ø 可選參數可以是DOM 對象的實例、輸入流,或者串。
Ø 傳入這個方法的內容會作為請求體的一部分發送。
XMLHttpRequest對象的setRequestHeader()方法
Ø setRequestHeader(DOMString header,DOMString value)方法用來設置請求的頭部信息。
Ø 當readyState值為1時,你可以在調用open()方法后調用這個方法。否則,你將得到一個異常。
Ø getResponseHeader(DOMString header,value)方法用于檢索響應的頭部值。
Ø 僅當readyState值是3或4(換句話說,在響應頭部可用以后)時,才可以調用這個方法。否則,該方法返回一個空字符串。
XMLHttpRequest對象的getAllResponseHeaders()方法
Ø 該getAllResponseHeaders()方法以一個字符串形式返回所有的響應頭部(每一個頭部占單獨的一行)。
Ø 如果readyState的值不是3或4,則該方法返回null。
作者:周大慶(zhoudaqing)
網址:http://www.aygfsteel.com/yifeng
>>>轉載請注明出處!<<<