【後知後覺】AJAX核心對象——XMLHttpRequest

來源:互聯網
上載者:User

標籤:xmlhttprequest   ajax   asynchronous   非同步   activex   

       自從把AJAX學了之後,就是在雲裡霧裡飄著,想總結,卻無從下手,就一直拖到現在。最近看DRP,王勇老師簡單的講了AJAX,對這個又是技術又是技巧的東西做了再一次的解,感覺自己稍微理解了一些。現將我現在理解的分享下。

       首先什麼是AJAX呢?


 AJAX簡介:

       AJAX這個名詞最早是由Jesse James Garrett提出的,當時給出的解釋是:Asynchronous JavaScript And XML,雖然當時Jesse James Garrett也曾發表文章介紹這個技術,但是真正被人們所熟知的時候還是在Google在Google Labs發布了Google Maps和Google搜尋引擎之後。

       其實關於AJAX,它是一種建立快速動態網頁的一種技術,是幾種技術的合成體,這幾種技術包括:

              基於HTML+CSS的標準的表示;

              用(DOM)Document Object Model進行動態顯示和互動;

              用XMLHttpRequest與伺服器進行非同步通訊;

              用JavaScript綁定和處理;

              用XML做資料交換 。

       正式這這幾種技術合成一體,才構成了強大的AJAX,那麼AJAX的核心是什麼呢?


AJAX的核心對象:XMLHttpRequest對象

        XMLHttpRequest對象是JavaScript的一個對象,其實這個對象早在IE5(1995年發布)出現的時候就有了,是將它實現成一個對象——ActiveX,而其他瀏覽器是將它實現為一個本地的JavaScript對象,正是因為有這些差異,所以在JavaScript中才包含一些邏輯,從而使用Activex技術或者使用本地JavaScript對象技術建立XMLHttpRequest的執行個體。到底如何建立呢?

建立XMLHttpRequest對象:

var xmlhttp=null;if (window.XMLHttpRequest){//IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest(); }else{//IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
分析:

       首先建立全域作用變數xmlhttp來儲存XMLHttpRequest,根據不同的瀏覽器返回的對象的不同,決定執行個體化對象,Firefox等瀏覽器調用本地的JavaScript來執行個體化對象,而IE5,IE6根據ActiveX對象來建立XMLHttpRequest執行個體。那這個對象的主要方法和屬性有哪些呢?

XMLHttpRequest方法與屬性:

方法:

               

分析:

       open(method,url,async) ,建立對伺服器的應用,有三個參數,參數1:需要提供提交方式(GET、POST、PUT);參數2:提供所調資源的URL;參數3:指示是同步還是非同步布爾值,預設為true,表示非同步。

      send(string):string,選擇性參數,具體向伺服器發出請求,如果請求聲明為非同步,則方法立即返回,否則會等待直到伺服器接到響應為止。string,僅用於POST請求。

      setRequestHeader(header,value):有兩個參數,第一表示設定的首部,第二表示要在首部放置的值。

屬性:

                

         瞭解了XMLHttpRequest的建立、方法、屬性後,我們應該怎麼使用AJAX去實現一個簡單的請求呢?

XMLHttpRequest對象的五步使用法:

       1、 建立XMLHttpRequest對象;
       2、 註冊回呼函數  ;
       3、 使用open方法和伺服器端互動;
       4、 設定發送的資料,開始和伺服器端互動 ;
       5、 在回呼函數中判斷互動是否結束,響應是否正確,並根據伺服器端返回的資料,更新頁面內容。


執行個體:
前台:

<body class="body1" onload="init()"><form name="userForm" target="_self" id="userForm"><div align="center"><hr width="97%" align="center" size=0><table width="95%" border="0" cellpadding="0" cellspacing="0"><tr><td width="22%" height="29"><div align="right"><font color="#FF0000">*</font>使用者代碼: </div></td><td width="78%"><input name="userId" type="text" class="text1" id="userId" onblur="validate()"size="10" maxlength="10"><span id="spanUserId"></span></td></tr><tr><td height="26"><div align="right"><font color="#FF0000">*</font>使用者名稱稱: </div></td><td><input name="userName" type="text" class="text1" id="userName" size="20" maxlength="20"></td></tr><tr><td height="26"><div align="right"><font color="#FF0000">*</font>密碼: </div></td><td><label><input name="password" type="password" class="text1" id="password" size="20" maxlength="20"></label></td></tr></table></div></form></body>

JS:

        var xmlHttp;function createXMLHttpRequest(){//1:建立XMLHttpRequest對象//IE7+、Firefox等if(window.XMLHttpRequest){xmlHttp=new XMLHttpRequest();}else {    //IE5、IE6if(window.ActiveXObject){xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}}}
function validate(){var field = document.getElementById("userId");if(trim(field.value).length!=0){//1:建立ajax核心對象XMLHttpRequestcreateXMLHttpRequest();var url="user_validate.jsp?userId=" + trim(field.value) + "&time=" + new Date().getTime();//2:註冊回呼函數,將方法給onredystatechange屬性xmlHttp.onreadystatechange=callback;//3:使用open方法,佈建要求方式、url、是否非同步xmlHttp.open("GET",url,true);//4:將設定資訊發送給ajax引擎xmlHttp.send(null);}else{document.getElementById("spanUserId").innerHTML="";}}
function callback(){//5:在回呼函數中判斷互動是否結束,響應是否正確,並根據伺服器端返回的資料,更新頁面內容。//與伺服器互動完成,即Ajax引擎狀態成功if(xmlHttp.readyState==4){//200表示“HTTP協議狀態成功”,404表示“未找到”,500表示“伺服器內部錯誤”if(xmlHttp.status==200){if(trim(xmlHttp.responseText)!=""){document.getElementById("spanUserId").innerHTML="<font color='red'>"+xmlHttp.responseText+"</font>";}else{document.getElementById("spanUserId").innerHTML="";}}else{alert("請求失敗,錯誤碼="+ xmlHttp.status);}}}
效果如下:

        

總結:

       Ajax,簡單來說就是通過XmlHttpRequest對象來向伺服器發非同步請求,從伺服器獲得資料,然後用javascript來操作DOM而更新頁面,這其中最關鍵的一步就是從伺服器獲得請求資料,實現頁面無重新整理,在頁面內與伺服器通訊,不需要打斷使用者的操作,具有更加迅速的響應能力。



      


相關文章

聯繫我們

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