初識Ajax

來源:互聯網
上載者:User

標籤:調用   儲存   響應   state   網路   輸出   對象   處理   microsoft   

本節要點:

  • 什麼是Ajax
  • XMLHttpRequest對象
  • 建立Ajax的過程

 

1         什麼是AJAX

AJAX是Asynchronous JavaScript  And XML的縮寫,但是,很多被認為是“Ajax”的頁面並沒有使用JavaScript或xml,所以把Ajax定義為一種構建Web頁面的方法,使頁面像案頭應用一樣具有響應性和互動性,這種說法更合適。AJAX的主要用途是使用JavaScript從伺服器擷取資料而不必重新整理整個頁面。其中AJAX拆分開來解釋:

  • Asynchronous:發送請求後不等返回結果,由回呼函數處理結果
  • JavaScript:向伺服器發起請求,獲得返回結果,更新頁面
  • XML:封裝資料

2         XMLHttpRequest對象

XMLHttpRequest是整個Ajax技術的靈魂。可以說沒有XMLHttpRequest,就沒有Ajax。Ajax技術的核心是非同步發送請求,而XMLHttpRequest則是非同步發送請求的對象。

XMLHttpRequest對象不是一個國際標準。在不同瀏覽器中有不同的實現。要實現能夠跨越瀏覽器啟動並執行Ajax應用,必須考慮所有的使用場合。使用時必鬚根據瀏覽器採用不同的文法進行建立。但對每一個都進行判斷不合實際,可以利用JavaScript的異常處理機制實現跨瀏覽器的XMLHttpRequest對象建立指令碼。

樣本:

var xmlhttp;

//IE瀏覽器

try{

     xmlhttp= new ActiveXObject(‘Msxml2.XMLHTTP‘);

}catch(e){

      try{

                        xmlhttp= new ActiveXObject(‘Microsoft.XMLHTTP‘);

      }catch(e){

              try{

                       //DOM 2瀏覽器

                       xmlhttp= new XMLHttpRequest();

              }catch(e){}

      }

 

3         建立Ajax的過程

3.1       構建Ajax應用

利用XMLHttpRequest(XHR)對象,每次構建Ajax應用必須遵循以下步驟:

  • 建立XMLHttpRequest對象
  • 建立Ajax請求
  • 發送Ajax請求
  • 處理伺服器響應

建立完XMLHttpRequest對象後就可 以開始使用它了。首先介紹open()方法,它建立一個請求,並準備向伺服器發送,open方法文法如下:

open(method , url , asynchronous , user , password);

其中的參數含義如下:

  • method:指定請求的類型,一般為get或post;
  • url:指定請求的地址,可以使用絕對位址或相對位址,可以附帶查詢字串
  • asynchronous:選擇性參數,標識請求是同步還是非同步,非同步請求為true,同步請求為false,預設情況下該參數為true;
  • user:選擇性參數,指定請求的使用者名稱,沒有則省略;
  • password:選擇性參數, 指定請求的密碼,沒有則省略;

樣本:建立一個請求,利用get方式發送,伺服器url為“my.do”

xmlhttp.open(“get”, “my.do”);

 

3.2       發送Ajax請求

在建立一個請求以後,可以使用send()方法向伺服器發送這個請求,同時發送資料。其原型如下:

send(body);

該方法僅有一個body參數,它標識要向伺服器發送的資料,其格式為查詢字串的形式。

樣本:

var body = “userName=qiyi&sex=male&age=25”;

xmlhttp.send(body);

3.3       捕獲請求的狀態變化

在發送請求後,往往無法知道請求什麼時候完成,所以必須利用事件機制捕獲請求的狀態,XMLHttpRequest對象提供了onreadystatechange事件實現這一功能。 onreadystatechange事件可以指定一個事件處理函數來處理XMLHttpRequest對象的執行結果。 在調用open方法與send方法時都會觸發onreadystatechange事件。

樣本:

xmlhttp.onreadystatechange=function(){  

//事件處理代碼

}

3.4       readyState狀態值

onreadystatechange事件是在readyState屬性方法改變時觸發,readyState的值表示了當前請求的狀態,在事件處理常式中可以根據這個值進行不同的處理,下表介紹了每個值的含義。

readyState

含義

0

表示對象已經建立,但還未初始化。

1

當調用open()方法後,readyState=1,表示XMLHttpRequest對象已經被初始化

2

當調用send()方法後,XHR在向伺服器發送請求的這段時間內,readyState =2

3

當調用send()方法後,伺服器成功接收到所有請求後,readyState = 3

4

表示已經成功接收到來自伺服器的響應資料。

使用readyState屬性判斷請求狀態

在整個請求過程中,onreadystatechange事件在每一次readyState值發生改變時都會被觸發。通常在事件中判斷readyState的值是在請求完成時才做處理。

xmlhttp.onreadystatechange=function(){

         if(xmlhttp.readState ==4){

         //對伺服器響應資料進行處理

         }

}

3.5       使用status屬性判斷請求的結果

status儲存伺服器端返回的HTTP響應代碼,它代表請求的處理結果,下表列出了常見的響應代碼的含義:

Http狀態代碼

含義

200

請求成功

202

請求被接收,但處理未完成

400

錯誤的請求

404

請求資源未找到

500

內部伺服器錯誤

在請求已經完成的情況下,可以使用status判斷請求的結果,其中,404錯誤是最常見的錯誤碼,代表“請求資源未找到”。在Ajax的開發中,最常用的是200這個響應代碼,例如在瀏覽器成功開啟了一個網頁,這時HTTP相應代碼就是200,但這個代碼一般不會顯示。

xmlhttp.onreadystatechange=function(){

         if(xmlhttp.readState ==4){

                   if(xmlhttp.status ==200){

                            //請求成功完成

                   }

                   else{

                            //網路失敗或者伺服器錯誤

                   }

         }

}

XHR對象可以接收伺服器返回的文本片段和XML文檔,分別儲存在responseText與responseXML屬性中。

3.6       獲得返迴文本

1)        使用responseText獲得返回的文本

當伺服器端處理了請求並返回後,可以利用XMLHttpRequest對象的responseText屬性擷取返回的文本片段。

//定義XMLHttpRequest對象的事件處理常式

xmlhttp.onreadystatechange=function(){      

         if(xmlhttp.readyState==4){

                   if(xmlhttp.status==200){

                            //捕捉文本                                                              alert(xmlhttp.responseText);

                   }else{

                            alert(xmlhttp.status);

                   }

         }

}

2)        使用responseXML捕捉XML文檔

除responseText屬性外,還可以用responseXML屬性來擷取伺服器返回的XML文檔。在使用responseText屬性擷取返回的純文字時,伺服器端無需特殊的操作。

如果伺服器返回的是XML文檔,必須要求響應體的HTTP頭資訊中“content-type”屬性為“text/xml”。

假如伺服器返回以下XML文檔

<?xml version="1.0" encoding="UTF-8">

<root>

<title>這是伺服器返回的XML資料</title>

</root>

 

//將伺服器返回的XML列印在螢幕上。

xmlhttp.onreadystatechange=function(){

     if(xmlhttp.readyState==4){

         if(xmlhttp.status==200){

         //擷取xml對象

         var xmlObj=xmlhttp.responseXML;

         //擷取第一個title標記內容

         var title=xmlObj.getElementsByTagName("title")[0].text;

         //輸出資訊

         alert("XML:\n" + xmlObj.xml + "\n" + "第一個title標記內容為:" + title);

          }else{

         alert(xmlhttp.status);

          }

      }

}

 

初識Ajax

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.