1、XMLHTTPRequest對象是什么?
2、創(chuàng)建XMLHTTPRequest對象。
3、XMLHTTPRequest的屬性和方法。
1、XMLHTTPRequest對象是什么?
最通用的定義為:XmlHttp是一套可以在Javascript、VbScript、Jscript等腳本語言中通過http協(xié)議傳送或從接收XML及其他數(shù)據(jù)的一套API。XmlHttp最大的用處是可以更新網(wǎng)頁的部分內容而不需要刷新整個頁面。(這個功能正是AJAX的一大特點之一:))
來自MSDN的解釋:XmlHttp提供客戶端同http服務器通訊的協(xié)議。客戶端可以通過XmlHttp對象(MSXML2.XMLHTTP.3.0)向http服務器發(fā)送請求并使用微軟XML文檔對象模型Microsoft? XML Document Object Model (DOM)處理回應。
這里說些題外話,其實這個東西很早就出現(xiàn)了,只是以前瀏覽器的支持不夠,只有IE中才支持,所以大多數(shù)的WEB程序員都沒有怎么用他,但是現(xiàn)在情況發(fā)生了很大地改變,Mozilla和Safari把它采用為事實上的標準,主流的瀏覽器都開始支持XMLHTTPRequest對象了。但是這里需要重點說明的是XMLHTTPRequest目前還不是一個W3C的標準,所以在不同的瀏覽器上表現(xiàn)也稍有些區(qū)別。
2、創(chuàng)建XMLHTTPRequest對象
對了,說到區(qū)別,我們這里來看看怎么來聲明(使用)它,在使用XMLHTTPRequest對象發(fā)送請求和處理響應之前,我們必須要用javascript創(chuàng)建一個XMLHTTPRequest對象。(IE把XMLHTTPRequest實現(xiàn)為一個ActiveX對象,其他的瀏覽器[如Firefox/Safari/Opear]則把它實現(xiàn)為一個本地的javascript對象)。下面我們就來看看具體怎么運用javascript來創(chuàng)建它吧:
以下為引用的內容: <script language="javascript" type="text/javascript"> <!-- var xmlhttp; // 創(chuàng)建XMLHTTPRequest對象 function createXMLHTTPRequest(){ if(window.ActiveXObject){ // 判斷是否支持ActiveX控件 xmlhttp = new ActiveObject("Microsoft.XMLHTTP"); // 通過實例化ActiveXObject的一個新實例來創(chuàng)建XMLHTTPRequest對象 } else if(window.XMLHTTPRequest){ // 判斷是否把XMLHTTPRequest實現(xiàn)為一個本地javascript對象 xmlhttp = new XMLHTTPRequest(); // 創(chuàng)建XMLHTTPRequest的一個實例(本地javascript對象) } } //--> </script> |
3、屬性和方法
由于東西太多現(xiàn)在先用個頁面來列舉出說有的方法和屬性,以后再來詳細舉例(主要是本人也在學習中)。
以下為引用的內容: <html> <head> <title>XMLHTTPRequest對象的說明DEMO</title> <script language="javascript" type="text/javascript"> <!-- var xmlhttp; // 創(chuàng)建一個XMLHTTPRequest對象 function createXMLHTTPRequext(){ if(window.ActiveXObject) { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } else if(window.XMLHTTPRequest){ xmlhttp = new XMLHTTPRequest(); } } function PostOrder(xmldoc) { createXMLHTTPRequext(); // 方法:open // 創(chuàng)建一個新的http請求,并指定此請求的方法、URL以及驗證信息 // 語法:oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword); // 參數(shù) // bstrMethod // http方法,例如:POST、GET、PUT及PROPFIND。大小寫不敏感。 // bstrUrl // 請求的URL地址,可以為絕對地址也可以為相對地址。 // varAsync[可選] // 布爾型,指定此請求是否為異步方式,默認為true。如果為真,當狀態(tài)改變時會調用onreadystatechange屬性指定的回調函數(shù)。 // bstrUser[可選] // 如果服務器需要驗證,此處指定用戶名,如果未指定,當服務器需要驗證時,會彈出驗證窗口。 // bstrPassword[可選] // 驗證信息中的密碼部分,如果用戶名為空,則此值將被忽略。 // 備注:調用此方法后,可以調用send方法向服務器發(fā)送數(shù)據(jù)。 xmlhttp.Open("get", "http://localhost/example.htm", false); // var book = xmlhttp.responseXML.selectSingleNode("http://book[@id='bk101']"); // alert(book.xml); |
// 如下的例子演示當XMLHTTPRequest對象的readyState屬性改變時調用HandleStateChange函數(shù), |
以下為引用的內容: // 語法:strValue = oXMLHttpRequest.responseBody; // 備注:變量,此屬性只讀,以unsigned array格式表示直接從服務器返回的未經(jīng)解碼的二進制數(shù)據(jù)。 alert(xmlhttp.responseBody); // 屬性:responseStream // 以Ado Stream對象的形式返回響應信息 // 語法:strValue = oXMLHttpRequest.responseStream; // 備注:變量,此屬性只讀,以Ado Stream對象的形式返回響應信息。 alert(xmlhttp.responseStream); // 屬性:responseText // 將響應信息作為字符串返回 // 語法:strValue = oXMLHttpRequest.responseText; // 備注:變量,此屬性只讀,將響應信息作為字符串返回。XMLHTTP嘗試將響應信息解碼為Unicode字符串, // XMLHTTP默認將響應數(shù)據(jù)的編碼定為UTF-8,如果服務器返回的數(shù)據(jù)帶BOM(byte-order mark),XMLHTTP可 // 以解碼任何UCS-2 (big or little endian)或者UCS-4 數(shù)據(jù)。注意,如果服務器返回的是xml文檔,此屬 // 性并不處理xml文檔中的編碼聲明。你需要使用responseXML來處理。 alert(xmlhttp.responseText); // 屬性:responseXML // 將響應信息格式化為Xml Document對象并返回 // 語法:var objDispatch = oXMLHttpRequest.responseXML; // 備注:變量,此屬性只讀,將響應信息格式化為Xml Document對象并返回。如果響應數(shù)據(jù)不是有效的XML文檔, // 此屬性本身不返回XMLDOMParseError,可以通過處理過的DOMDocument對象獲取錯誤信息。 alert("Result = " + xmlhttp.responseXML.xml); // 屬性:status // 返回當前請求的http狀態(tài)碼 // 語法:lValue = oXMLHttpRequest.status; // 返回值:長整形標準http狀態(tài)碼,定義如下: // 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 // 備注:長整形,此屬性只讀,返回當前請求的http狀態(tài)碼,此屬性僅當數(shù)據(jù)發(fā)送并接收完畢后才可獲取。 alert(xmlhttp.status); // 屬性:statusText // 返回當前請求的響應行狀態(tài) // 語法:strValue = oXMLHttpRequest.statusText; // 備注:字符串,此屬性只讀,以BSTR返回當前請求的響應行狀態(tài),此屬性僅當數(shù)據(jù)發(fā)送并接收完畢后才可獲取。 alert(xmlhttp.statusText); } } //--> </script> </head> <body> <form name="frmTest"> <input name="myButton" type="button" value="Click Me" onclick="PostOrder('http://localhost/example.htm');"> </form> </body> </html> |