Ajax入門

理解同步交互和異步交互
舉個例子:普通B/S模式(同步)       AJAX技術(異步)
       *  同步:
      提交請求->等待服務器處理->處理完畢返回  這個期間客戶端瀏覽器不能幹任何事。
       發送方發出數據後,等接收方發回響應以後才發下一個數據包的通訊方式。  
       你現在傳輸,我要親眼看你傳輸完成,纔去做別的事 。
       *  異步: 
      請求通過事件觸發->服務器處理(這時瀏覽器仍然可以作其他事情)->處理完畢。
       發送方發出數據後,不等接收方發回響應,接着發送下個數據包的通訊方式 。
       你傳輸吧,我去做我的事了,傳輸完了告訴我一聲 。  
什麼是Ajax?

      Ajax被認爲是(Asynchronous JavaScript and XML的縮寫)。現在,允許瀏覽器與服務器通信而無須刷新當前頁面的技術都被叫做Ajax.

       Ajax並非一種新的技術,而是幾種原有技術的結合體。它由下列技術組合而成: 

1.使用CSS和XHTML來表示。 

2. 使用DOM模型來交互和動態顯示。 

3.使用XMLHttpRequest來和服務器進行異步通信。 

4.使用javascript來綁定和調用。


Ajax的工作原理
       AJAX採用異步交互過程。AJAX在用戶與服務器之間引入一箇中間媒介,從而消除了網絡交互過程中的處理—等待—處理—等待缺點。
       用戶的瀏覽器在執行任務時即裝載了AJAX引擎。AJAX引擎用JavaScript語言編寫,通常藏在一個隱藏的框架中。它負責編譯用戶界面及與服務器之間的交互。
       AJAX引擎允許用戶與應用軟件之間的交互過程異步進行,獨立於用戶與網絡服務器間的交流。現在,可以用Javascript調用AJAX引擎來代替產生一個HTTP的用戶動作,內存中的數據編輯、頁面導航、數據校驗這些不需要重新載入整個頁面的需求可以交給AJAX來執行。 

       AJAX的原理簡單來說通過XmlHttpRequest對象來向服務器發異步請求,從服務器獲得數據,然後用javascript來操作DOM而更新頁面。這其中最關鍵的一步就是從服務器獲得請求數據。


瞭解XMLHttpRequest

    XMLHttpRequest是ajax的核心機制,它是在IE5中首先引入的,是一種支持異步請求的技術。簡單的說,也就是javascript可以及時向服務器提出請求和處理響應,而不阻塞用戶。達到無刷新的效果。

XMLHttpRequest屬性有:

屬性 描述
onreadystatechange  每次狀態改變所觸發事件的事件處理程序。
responseText         從服務器進程返回數據的字符串形式。
responseXML       從服務器進程返回的DOM兼容的文檔數據對象。
status                       從服務器返回的數字代碼,比如常見的404(未找到)和200(已就緒)
status Text  伴隨狀態碼的字符串信息
readyState               對象狀態值,存有服務器響應的狀態信息。
每當 readyState 改變時,onreadystatechange 函數就會被執行。

 readyState 屬性可能的值:

  狀態    描述
    0   請求未初始化(在調用 open() 之前)
    1   請求已提出(調用 send() 之前)
    2   請求已發送(這裏通常可以從響應得到內容頭部)
    3   請求處理中(響應中通常有部分數據可用,但是服務器還沒有完成響應)
    4   請求已完成,此時可以通過responseXml和responseText獲取完整的迴應數據。 

  但是,由於各瀏覽器之間存在差異,所以創建一個XMLHttpRequest對象可能需要不同的方法。這個差異主要體現在IE和其它瀏覽器之間。下面是一個比較標準的創建XMLHttpRequest對象的方法。

[javascript] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. /* 
  2.  * 創建XMLHttpRequest對象 
  3.  * */  
  4. function ajaxFunction(){  
  5.     var xmlHttp;  
  6.     try { // Firefox, Opera 8.0+, Safari  
  7.         xmlHttp = new XMLHttpRequest();  
  8.     }   
  9.     catch (e) { // Internet Explorer  
  10.         try {  
  11.             xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");  
  12.         }   
  13.         catch (e) {  
  14.             try {  
  15.                 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
  16.             }   
  17.             catch (e) {  
  18.                 alert("您的瀏覽器不支持AJAX!");  
  19.                 return false;  
  20.             }  
  21.         }  
  22.     }  
  23.     return xmlHttp;  
  24. }  
AJAX(客戶端)開發步驟:
1.創建XMLHttpRequest對象
[javascript] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. var xmlHttp = ajaxFunction();  
2.接受服務器端的響應
[javascript] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. /* readyState 屬性存有服務器響應的狀態信息。每當 readyState 改變時,onreadystatechange 函數就會被執行。*/  
  2. xmlHttp.onreadystatechange = function(){  
  3.     if(xmlHttp.readyState==4){  
  4.         var data=xmlHttp.responseText;  
  5.         alert("xmlHttp.responseText:"+data);  
  6.     }  
  7. }  
3.打開和服務器的連接
[javascript] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. /* 
  2.  * bstrMethod: http方法,例如:POST、GET、PUT及PROPFIND。大小寫不敏感。  
  3.  * bstrUrl: 請求的URL地址,可以爲絕對地址也可以爲相對地址。  
  4.  * varAsync[可選]:布爾型,指定此請求是否爲異步方式,默認爲true。如果爲真,當狀態改變時會調用onreadystatechange屬性指定的回調函數。  
  5.  * bstrUser[可選]:如果服務器需要驗證,此處指定用戶名,如果未指定,當服務器需要驗證時,會彈出驗證窗口。  
  6.  * bstrPassword[可選]:驗證信息中的密碼部分,如果用戶名爲空,則此值將被忽略。  
  7. */  
  8. xmlHttp.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);  
4.發送請求到http服務器
[javascript] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. /* varBody:欲通過此請求發送的數據。 */  
  2. xmlHttp.send(varBody);  
發佈了52 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章