XMLHttpRequest是XMLHttp組件的對象,經過這個對象,Ajax能夠像桌面應用程序同樣只與服務器進行數據層的交換,而沒必要每次都刷 新界面,也沒必要每次將數據處理的工做都交給服務器來作;這樣既減輕了服務器負擔又回憶了響應速度,縮短了用戶的等待時間。
XMLHttpRequest對象與Ajax
在Ajax應用程序中,XMLHttpRequest對象負責將用戶信息以異步通訊地發送到服務器端,並接收服務器響應信息和數據。
須要注意的是JavaScript自己並不具備向服務器發送請求的能力,要麼使用window.open()方法從新打開一個頁面,要麼使用XMLHttpRequest對象發送請求,不一樣的是,前者是普通的即同步交互模式,然後者是異步交互模式。
XMLHttpRequest對象的屬性和方法。
IE5.0 開始,開發人員就能夠在WEB頁面內部使用XMLHTTP ActiveX組件擴展自身的功能,而Mozilla1.0及NetScape7則是建立繼承XML的代理類XMLHttpRequest;對於大多狀況 XMLHttpRequest和XMLHttp組件很類似,方法和屬性相似,只是部份屬性不一樣。如下代碼演示了若是在IE以及NetScape等瀏覽器中 建立XMLHttpRequest對象。javascript
<script language="javascript"> //定義一個變量 var http_request = false; //IE瀏覽器中建立 http_request = new ActiveXObject("Msxml2.XMLHTTP");//新版本IE http_request = new ActiveXObject("Microsoft.XMLHTTP");//舊版本IE //Netscope瀏覽器 http_request = new XMLHttpRequest(); </script>
須要注意的是 在微軟最新的 IE7.0版本瀏覽器中也已經支持了XMLHttpRequest,也就是說在IE7.0中同時支持以及上二種建立方式。在咱們開發AJAX應用程序時必定要注意要兼容瀏覽器類型。java
建立方式能夠以下:數組
var http_request = false; function createXMLHttpRequest() { http_request = false; //開始初始化XMLHTTPRequest對象 if(window.XMLHttpRequest)//若是是window.XMLHttpRequest對象 { //Mozilla,netscape 瀏覽器 http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) {//設置MiME類別 //有些版本的瀏覽器在處理服務器返回的未包含XML mime-type頭部信息的內容時會報錯,所以,要確保返回的內容包含text/xml信息。 http_request.overrideMimeType("text/xml"); } } else if(window.ActiveXObject)//若是是window.ActiveXObject { //IE瀏覽器 try { http_request = new ActiveXObject("Msxml2.XMLHTTP");//IE較新版本 } catch (e) { try { http_request = new ActiveXObiect("Microsoft.XMLHTTP"); //ie舊版本 } catch (e){} } } if(!http_request) { //異常,建立對象實例失敗 window.alert("不能建立XMLHttpRequest對象實例。"); return false; } }
這樣就是一個簡單的跨瀏覽器的建立方法。
另外XMLHttpRequest對象提供了一系列屬性和方法,來向服務器端發起異步HTTP請求,監聽服務器狀態,並在服務器完成數據響應處理以後接收服務器端返回的信息數據。下面是對其的說明:
onreadystatechange:指定當readyState屬性改變時的事件處理句柄,屬性只寫。
XMLHttpRequest 對象屬性onreadystatechange是readyState狀態改變的事件觸發器,用來指定當readyState屬性發生改變時的處理事件。 在使用過程當中,一般經過將事件處理函數名稱賦予onreadystatechange的方式,來爲XMLHttpRequest指定事件觸發器,而在事件 處理函數中判斷readyState狀態值並作相應的處理。
如上:http_request.onreadystatechange = processRequest;processRequest做爲事件處理函數,並在processRequest函數體內在readyState狀態爲 4 時開始執行。
responseBody:將回應信息正文以unsigned byte 數組形式返回,屬性只讀。
responseXML:將響應信息格式化爲XML Document對象返回,屬性只讀。
abort:取消當前請求;
語法:http_request.abort();調用此方法,當前請求返回uninitialized狀態。
getAllResourceHeaders:獲取相應的所有http頭信息;像JSP中的HttpServletRequest對象同樣,獲取http請求的 請求頭信息,語法:headers = http_request.getAllResourceHeaders();
getResourceHeader:從響應信息中獲取指定的http頭信息。
語法:head = http_request.getResourceHeader("header-name");
open:建立一個新的http請求,並指定此請求的方法,URL,以及驗證信息(用戶名/密碼)。
語法:http_request.open(method,url,async,user,password);
async爲布爾值,指定請求是否異步方式,默認爲true;若是爲真,當state狀態改變時會調用onreadystatechange屬性指向的回調函數。若是服務器須要驗證,則應該指定用戶名和密碼 。
send:發送請求到http服務器並接收回應。建立http請求後,就能夠向服務器發送http請求,send方法被調用
語法:http_request.send(varBody);
參 數varBody爲要發送給服務器的內容。若是沒有內容要發送,varBody參數能夠省略,但最好寫爲null,由於若是省略不寫在Firfox中會報 錯,因此就爲http_request.send(null);。此方法的同步或異步方式取決於open方法中的async參數。
setRequestHeader:單獨設定請求的某個頭。
status:返回當前HTTP請求的狀態碼,屬性只讀。如:404=「文件未找到」,200=「成功」
statusText:返回當前HTTP請求的狀態行,屬性只讀。 瀏覽器
總結,五個步驟:服務器
1.建立XMLHttpRequest對象。異步
2.註冊回調函數 xmlhttp.oncreadystatechange = 函數名 ; //注意:該函數名後面不須要加括號。async
3.設置鏈接信息 xmlhttp.open();ide
xmlhttp.open(請求方式,url,是否同步.); //第一個參數,請求方式,通常get or post,第二個參數,請求url,get請求參數也在裏面,第三個參數,true or false ,true表示異步.函數
4.發送數據。xmphttp.send(data);post