XMLHttpRequest對象
XMLHttpRequest對象得到下列瀏覽器的支持:Internet Explorer5.0+\Safari 1.2,Mozilla 1.0 Firefox,Opera8+以及Netscape7.IE瀏覽器使用用ActiveXObject,而其他的瀏覽器使用名為XMLHttpRequest的javascript內建對象,如果需要針對不同的瀏覽器來創建此對象,可以用Try...catch語句。代碼如下:
<script type="text/javascript">
function AjaxFunction()
{
var xmlHttp;
try
{
//Firefox,Opera8.0+,Safari
xmlHttp=new XMLHttpRequest();
}
catch(err)
{
//Internet EXplorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(err)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(err)
{
alert("您的瀏覽器不支持Ajax!");
return false;
}
}
}
}
</script>
還有一種檢測方法:
<script type="javascript/txt">
xmlhttp=null;
if window.XMLHttpRequest)
{
//code for firefox,Opera,IE7,etc.
xmlhttp=new XMLHttpRequest();
}
else if(window.ActiveXObject)
{//code for IE6 ,IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
}
XMLHttpRequest對象的重要屬性:
onreadystatechange屬性存有處理服務器響應的函數。即當readyState值發生變化后需要執行的函數。
readyState屬性存有服務器響應的狀態信息。每當readyStaten改變時,就會執行onreadystatechange函數。
readystate屬性可能的值如下:
0 請求未初始化,在調用open()之前,已經創建一個XMLHttpRequest對象,但是還沒有初始化
1 在調用send()之前,已經調用了open()方法并且XMLHttpRequest已經準備好把一個請求發送到服務器。
2 已經通過send()方法把一個請求發送到服務器端,但是還沒有收到一個響應
3 請求處理中,此時,已經接收到HTTP響應頭部信息,但是消息體部分還沒有完全接收結束
4 請求已經完成(可以訪問服務器響應,并使用它)
status屬性:XMLHttpRequest對象的status屬性一般用來返回服務器的HTTP狀態碼。status為200表示“成功”,status為404代表“頁面未找到”。有時候,特別是剛開始學Ajax的時候,可能會將代碼直接在本地運行。如果在本地運行(如:C:\ajax\helloworld.htm),那么status屬性不管是在“成功”還是“頁面未找到”的情況下,都返回的是0,而不是200和404。
status狀態值
status屬性描述了HTTP狀態代碼,當readyState值為3(正在接收中)或4(已加載)時,這個status屬性才可用。當readyState的值小于3時試圖存取status的值將引發一個異常。
長整形標準http狀態碼,定義如下: Number Description
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
statusText屬性:返回當前請求的響應行狀態;字符串,此屬性只讀,以BSTR返回當前請求的響應行狀態,此屬性僅當數據發送并接收完畢后才可獲取,即僅當readyState值為3或4才可用。當readyState為其它值時試圖存取statusText屬性將引發一個異常。
responseText屬性:可以通過responseText屬性來取回由服務器返回的數據。當readyState值為0、1或2時,responseText包含一個空字符串。當readyState值為3(正在接收)時,響應中包含客戶端還未完成的響應信息。當readyState為4(已加載)時,該responseText包含完整的響應信息。
responseXML屬性
此responseXML屬性用于當接收到完整的HTTP響應時(readyState為4)描述XML響應;此時,Content-Type頭部指定MIME(媒體)類型為text/xml,application/xml或以+xml結尾。如果Content-Type頭部并不包含這些媒體類型之一,那么responseXML的值為null。無論何時,只要readyState值不為4,那么該responseXML的值也為null。
其實,這個responseXML屬性值是一個文檔接口類型的對象,用來描述被分析的文檔。如果文檔不能被分析(例如,如果文檔不是良構的或不支持文檔相應的字符編碼),那么responseXML的值將為null。
XMLHttpRequest方法:
abort()方法
你可以使用這個abort()方法來暫停與一個XMLHttpRequest對象相聯系的HTTP請求,從而把該對象復位到未初始化狀態。
open()方法:初始化一個XMLHttpRequest對象,參數解析如下:
第一個參數定義發送請求所使用的方法(GET/POST/PUT/DELETE/HEAD,為了把數據發送到服務器,應該使用POST方法;為了從服務器端檢索數據,應該使用GET方法。)
第二個參數指定處理HTTP請求的服務器端的腳本文件,通常是一個URL地址,里面包含了動態文件,擴展名為ASP/PHP(也可以是一個相對的地址)。
第三個參數定義對請求進行處理的方式,有兩個值:TRUE表示進行異步處理(默認值);FALSE表示同步處理。
第四個參數和第五個參數是用戶名和密碼,用于需要登錄或認證的服務器。在調用open()方法后,XMLHttpRequest對象把它的readyState屬性設置為1(打開)并且把responseText、responseXML、status和statusText屬性復位到它們的初始值。另外,它還復位請求頭部。注意,如果你調用open()方法并且此時readyState為4,則XMLHttpRequest對象將復位這些值。
send()方法:在通過調用open()方法準備好一個請求之后,你需要把該請求發送到服務器。僅當readyState值為1時,你才可以調用send()方法;否則的話,XMLHttpRequest對象將引發一個異常。該請求被使用提供給open()方法的參數發送到服務器。當async參數為true時,send()方法立即返回,從而允許其它客戶端腳本處理繼續。在調用send()方法后,XMLHttpRequest對象把readyState的值設置為2(發送)。當服務器響應時,在接收消息體之前,如果存在任何消息體的話,XMLHttpRequest對象將把readyState設置為3(正在接收中)。當請求完成加載時,它把readyState設置為4(已加載)。對于一個HEAD類型的請求,它將在把readyState值設置為3后再立即把它設置為4。
send()方法使用一個可選的參數-該參數可以包含可變類型的數據。典型地,你使用它并通過POST方法把數據發送到服務器。另外,你可以顯式地使用null參數調用send()方法,這與不用參數調用它一樣。對于大多數其它的數據類型,在調用send()方法之前,應該使用setRequestHeader()方法(見后面的解釋)先設置Content-Type頭部。如果在send(data)方法中的data參數的類型為DOMString,那么,數據將被編碼為UTF-8。如果數據是Document類型,那么將使用由data.xmlEncoding指定的編碼串行化該數據。
setRequestHeader()方法
該setRequestHeader(DOMString header,DOMString value)方法用來設置請求的頭部信息。當readyState值為1時,你可以在調用open()方法后調用這個方法;否則,你將得到一個異常。
getResponseHeader()方法
getResponseHeader(DOMString header,value)方法用于檢索響應的頭部值。僅當readyState值是3或4(換句話說,在響應頭部可用以后)時,才可以調用這個方法;否則,該方法返回一個空字符串。
getAllResponseHeaders()方法
該getAllResponseHeaders()方法以一個字符串形式返回所有的響應頭部(每一個頭部占單獨的一行)。如果readyState的值不是3或4,則該方法返回null。
關鍵詞:XMLHttpRequest
