一、發送請求
Ajax中通過XMLHttpRequest對象發送異步方式的后台請求時。通常有兩種方式的請求,一種是GET請求,另一種是POST請求。發送請求一般要經過4個步驟分別是:
(1)初始化XMLHttpRequest對象
(2)為XMLHt指定一個返回結果的回調函數,用於返回結果的處理
(3)創建一個與服務器的連接。指定發送的請求是GET還是POST且是否采用異步方式發送請求
(4)向服務器發送請求。

1 <script type="text/javascript"> 2 3 function checkBrowerType(){ 4 //第一步:初始化XMLHttpRequest對象 5 var http_request = false; 6 if(window.XMLHttpRequest){ //非IE瀏覽器; 在調用window.ActiveXObject將返回一個對象,或是null(如果返回一個對象則為true,返回null則為false) 7 http_request = new XMLHttpRequest(); //創建XMLHttpRequest對象 8 9 }else if(window.ActiveXObject){ 10 try{ 11 http_request = new ActiveXObject("Msxml2.XMLHTTP"); //創建XMLHttpRequest對象 12 }catch(e){ 13 try{ 14 http_request = new ActiveXObject("Microsoft.XMLHTTP"); //創建XMLHttpRequest對象 15 }catch(e){ 16 17 } 18 } 19 } 20 if(!http_request){ 21 alert("不能創建XMLHttpRequest對象實例"); 22 return false; 23 } 24 //第二步:設置回調函數 25 http_request.onreadystatechange = getResult; //調用返回處理函數 26 /* 27 注意:如果XMLHttpRequest對象的onreadystatechange屬性指定回調函數時, 28 不能指定要傳遞的參數。如果要指定參數可以使用以下方法: 29 http_request.onreadystatechange = function(){ 30 getResult(param) 31 }; 32 */ 33 34 //第三步:創建一個與服務器的連接,(請求采用GET或POST請求方式,以及是否采用異步方式) 35 http_request.open("GET",url,true); 36 //第四步:向服務器發送請求 37 http_request.send(null); 38 } 39 /*編寫回調函數getResult()*/ 40 function getResult(){ 41 42 } 43 </script>
小技巧:在建立與服務器的連接時,指定open(“method”,“url” ,async)中的url參數時,最好將一個時間戳追加到該url參數后面,這樣可以防止因瀏覽器緩存結果而不能實時得到最新的結果。例如:可以這樣指定url參數:String url="deal.jsp?nocache="+new Date().getTime();
二、處理服務器的響應
在處理服務器響應時需要通過XMLHttpRequest對象的onreadystatechange屬性指定一個回調函數,用來處理服務器響應。在這個回調函數中,首先需要判斷服務器的請求狀態,保證請求已經完成;然后根據服務器的HTTP狀態碼,判斷服務器對請求響應是否成功,如果成功,則獲取服務器的響應反饋給客戶。
XMLHttpRequest中提供了兩種訪問服務器響應的屬性:一個是responseText屬性,返回字符串響應;另一個是responseXML屬性,返回XML響應。
(1)處理字符串響應
例如:
1 function getResult(){ 2 if(http_request.readyState == 4){ //判斷請求狀態 3 if(http_request.status == 200){ //請求成功,開始處理返回結果 4 alert(http_request.responseText); //顯示判斷結果 5 }else{ 6 alert("請求的頁面有錯誤!"); 7 } 8 } 9 }
(2)處理XML響應
如果在服務器端需要生成特別負責的響應,則就要應用XML響應。
例:保存圖書信息到XML文檔中,並且使用回調函數將XML中的信息讀取出來。
①XML中的圖書信息,代碼如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <mr> 3 <books> 4 <book> 5 <title>Java Web程序開發</title> 6 <publisher>人民郵電出版社</publisher> 7 </book> 8 <book> 9 <title>Java從入門到精通</title> 10 <publisher>人民郵電出版社</publisher> 11 </book> 12 </books> 13 </mr>
②在回調函數中遍歷保存圖書信息的XML文檔,並將其顯示到頁面中,代碼如下:
1 <script type="text/javascript"> 2 function getResult(){ 3 //判斷請求狀態 4 if(http_request.readyState == 4){ 5 //請求成功,開始處理響應 6 if(http_request.status == 200){ 7 var xmldoc = http_request.responseXML; 8 var str = ""; 9 for(int i=0;i<xmldoc.getElementsByTagName("book").length;i++){ 10 var book = xmldoc.getElementsByTagName("book").item(i); 11 str = str + "《"+book.getElementsByTagName("title")[0].firstChild.data + "》 由“" 12 +book.getElementByTagName("publisher")[0].firstChild.data + "” 出版<br>"; 13 } 14 document.getElementById("book").innerHTML = str; //顯示圖書信息 15 }else{ 16 alert("請求的頁面有錯誤!"); 17 } 18 19 } 20 } 21 </script> 22 <div id="book"></div>