1. 程式人生 > >Ajax中與服務器的通信【發送請求與處理響應】

Ajax中與服務器的通信【發送請求與處理響應】

active 狀態碼 代碼 技術 bsp item 出版 ml2 圖書

一、發送請求

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>

Ajax中與服務器的通信【發送請求與處理響應】