學習Ajax之XMLHttpRequest對象

來源:互聯網
上載者:User
文章目錄
  • 正確建立XMLHttpRequest對象
  • 產生一次請求.
  • 處理響應

Ajax的核心是XMLHttpRequest對象,所有的東西都是通過它來實現的.今天就來建立一個XMLHttpRequest對象.並用它來產生一次請求,並處理響應.

正確建立XMLHttpRequest對象

由於瀏覽器的差異,建立這個對象需要通過瀏覽器能力的檢測.從而相應的執行個體化這個對象.通常我們是通過建構函式來執行個體化一個XMLHttpRequest對象.這樣做的好處是可以複用.因為我們一般不可能只是建立一個.而通常是建立多個.

function createXmlHttpObject(){var xmlHttp = null;try{xmlHttp = new XMLHttpRequest();}catch(e){try{xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");}catch(e){xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}}return xmlHttp;}

 

產生一次請求.

有了上面的函數.利用它建立一個對象.並用open()和send()方法產生一次請求.最好我們將這個請求也寫到一個函數裡面.因為請求是在需要的時候再發出.比如點選連結或者按下鍵盤按鈕等.所以我們可以這樣做:

function myFirstRequest(){xmlHttp=createXmlHttpObject();//不支援則拋出錯誤的話if (xmlHttp == null) {alert ("Oop! Browser does not support HTTP Request.")return;}//你要請求的URL,獨立弄出來,你可能需要做些處理.var url;xmlHttp.onreadystatechange=function(){//處理請求過程中的狀態.包括返回資料的處理.}//以GET方式請求URL,參數true表示非同步.(我強烈大家設定為true否則為阻塞模式)xmlHttp.open("GET", url, true);//GET方式發送null.POST方式則需要發送資料.xmlHttp.send(null);}

產生請求的框框大概就是這個樣子了.

處理響應

上面的注釋,’處理請求過程中的狀態‘就是這裡要介紹的內容.

onreadystatechange屬性指定了一個方法(function)這個方法在請求的不同階段將被幾次調用.我們可以通過它來訪問XMLHttpRequest對象中的屬性來判斷交換的狀態和返回的資料.這些屬性是:
readyState 是個表是下列狀態的整數值:
0:尚未初始化.
1:載入中
2:載入完成
3:互動
4:完成

status是一個表示請求狀態的數字代碼:這個是由伺服器產生的http協議狀態.比如我們常看到的200表示’OK’,404表示’沒有找到’等.

statusText是與狀態碼相關的一條資訊.

知道了上面的資訊.就可以分開做判斷,最後對返回資料做些處理.

下面是一個常用的onreadystatechange方法.

xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4 && xmlHttp.status==200){//伺服器正常.並返回的需要的資料.我們在這裡//對responseText做處理.} else {//載入中.或者其他情況.}}

當然你也看到了.上面的例子並不完整.他沒有細分readyState的各個階段.所以還有一個比較常用的.用switch語句.或者依然用if語句做些細緻的判斷.簡單的句子.這裡不重複了.

到這裡你大概已經基本Ajax請求的處理方法了.接下來我寫個很簡單的例子.(基於PHP).你也可以搭建一個PHP環境.實驗一下這個例子:

伺服器端的代碼:

<?phpif(isset($_GET['name'])){if(''==$_GET['name']){echo '請輸入名字';}else{echo 'Name: '.$_GET['name'];}}else{echo 'This is a server file';}?>

使用者端代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Test Ajax (GET)</title><script language="javascript">(function(){if(!window.YHLJS) window['YHLJS']={};function createXmlHttpObject(){var xmlHttp = null;try{xmlHttp = new XMLHttpRequest();}catch(e){try{xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");}catch(e){xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}}return xmlHttp;}function myFirstRequest(){xmlHttp=createXmlHttpObject();//不支援則拋出錯誤的話if (xmlHttp == null) {alert ("Oop! Browser does not support HTTP Request.")return;}var url;var data=document.getElementById('name').value;//alert(data);url='server.php?name='+data;xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4 && xmlHttp.status==200){alert(xmlHttp.responseText);document.body.style.cursor = 'auto';} else {document.body.style.cursor = 'wait';}}//以GET方式請求URL,參數true表示非同步.(我強烈大家設定為true否則為阻塞模式)xmlHttp.open('GET', url, true);//GET方式發送null.POST方式則需要發送資料.xmlHttp.send(null);}window['YHLJS']['myFirstRequest']=myFirstRequest;})();  <form id="send" method="post" action="" onsubmit="YHLJS.myFirstRequest();return false"><div><label>您的名字:<input type="text" name="name" id="name" tabindex="1" value="" /> </label><input type="submit" name="post_submit" id="post_submit" value="提交" tabindex="1" /></div></form></div></body></html>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.