Ajax概述及淺談其與服務器的交互過程


概念:

       首先AJAX不只是一個特定的客戶端技術,更應算是一種技巧。Ajax技術的核心操作是用XmlHttpRequest(下稱XHR)對象進行異步數據處理。

       所謂異步,即通過 AJAX,JavaScript 無需等待服務器的響應,而是:

Ø  在等待服務器響應時執行其他腳本

Ø  當響應就緒后對響應進行處理

作用:

       在AJAX技術中,主要利用JavaScript的XHR對象來傳遞用戶界面上的數據到服務端並返回結果。XHR對象用來響應通過HTTP傳遞的數據,一旦數據返回到客戶端就可以立刻使用DOM(是頁面的一個完全面向對象的表示)技術來操作數據並顯示到網頁上。

       AJAX的最終目的是創建更好更快以及交互性更強的 Web 應用程序。

 

與傳統的web 請求/相應 模式相比:

       優點:傳統的網頁(不使用 AJAX)如果需要更新內容,必需重載整個網頁面;AJAX應用可以僅向服務器發送並取回必需的數據,通過在后台與服務器進行少量數據交換,實現網頁的異步更新。避免了在網絡上發送那些沒有改變過的信息。就是能在不更新整個頁面的前提下維護數據,就是允許瀏覽器與服務器進行通信而無需刷新頁面,這使得Web應用程序能夠更為迅捷地回應用戶動作。

      缺點:傳統的遵循請求/響應模式的應用,對於每個請求都會加載整個頁面,所以,原來查看的頁面都會放到瀏覽器的歷史棧中。而Ajax用XHR對象做出的請求不會記錄在瀏覽器的歷史中。如果你的用戶習慣使用瀏覽器的“后退”按鈕在Web應用中進行導航,就可能會產生問題。

 

通過AJAX與服務器的交互的過程:

大體上一般的交互過程只需要簡單的三步即可完成

 

 

 

下面談一下標准的AJAX交互過程:

 

 

 

 

1.    一個客戶端事件觸發一個Ajax事件,例如

<input type="text" id="txtEmail" onblur=“showHint(str)”/>

2.   創建XHR對象的一個實例,使用open()方法建立調用,並設置URL以及所希望的HTTP方法(get或post)。請求實際上通過一個send()方法調用觸發

 

<script type="text/javascript">
function showHint(str)
{
var xmlhttp;
if (str.length==0)
  { 
  document.getElementById("txtHint").innerHTML="";
  return;
  }

//創建 XMLHttpRequest 對象 
if (window.XMLHttpRequest)
  {// 對於 IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// 對於 IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

//當服務器狀態改變時執行函數 
xmlhttp.onreadystatechange=callback;

//把請求發送到服務器上的文件
xmlhttp.open("GET","/ajax/gethint.asp?q="+str,true);
xmlhttp.send();
}
//回調函數
function callback()
{
  //響應就緒時
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
}
</script>

 

3. 向服務器做出請求,可能調用servlet、CGI腳本或任何服務器端技術

4. 服務器可以做你想做的事情,包括訪問數據庫,甚至訪問另一個系統

5. 請求返回到瀏覽器。Content-Type設置為text/xml的XHR對象只能處理text/html類型的結果。可以設置另外一些首部,使得瀏覽器不會在本地緩存結果:

response.setHeader(“Cache-Control”,”no-cache”);

response.setHeader(“Pragma”,”no-cache”);

 

6. 我們可以在將XHR對象配置為處理返回時調用callback()函數(xmlHttp.onreadystatechange=callback;)。該函數會檢查XHR對象的readyState屬性,然后查看服務器返回的狀態碼。如果一切正常,callback()函數就會在客戶端做些相應的操作

 

//回調函數

function callback()
{
  //響應就緒時
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
}


總結:

(1)    交互過程所用到的XHR對象的主要屬性方法

 

 

(2)Ajax的靈活性在於動態改變局部資料量,因此小量傳輸資料才能達到最高效益。如果一大張資料表都要透過DOM的操作來改

變,不如就由后端程式與資料庫來操作,效益更高。

(3)當Ajax載入資料量大時,有時會讓使用者產生錯覺,不確定剛剛按下的按扭是否發生作用。因此開發人員必須設計適當的提

示,讓使用者了解目前程式的執行狀況。

(4)與 POST 相比,GET 更簡單也更快,並且在大部分情況下都能用。

如下情況則須使用POST方式:

Ø 無法使用緩存文件(更新服務器上的文件或數據庫)

Ø向服務器發送大量數據(POST 沒有數據量限制)

Ø 發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM