2.3 交互示例

看到這裏,你可能想知道典型的Ajax交互是什麼樣。圖2-1顯示了Ajax應用中標準的交互模式。
圖2-1 標準Ajax交互
不同於標準Web客戶中所用的標準請求/響應方法,Ajax應用的做法稍有差別。
1.一個客戶端事件觸發一個Ajax事件。從簡單的onchange事件到某個特定的用戶動作,很多這樣的事件都可以觸發Ajax事件。可以有如下的代碼:
<input type="text"d="email" name="email" οnblur="validateEmail()";>
2. 創建XMLHttpRequest對象的一個實例。使用open()方法建立調用,並設置URL以及所希望的HTTP方法(通常是GETPOST)。請求實際上通過一個send()方法調用觸發。可能的代碼如下所示:
var xmlHttp;
function validateEmail() {
   var email = document.getElementById("email");
   var url = "validate?email=" + escape(email.value);
   if (window.ActiveXObject) {
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
   }
   else if (window.XMLHttpRequest) {
     xmlHttp = new XMLHttpRequest();
   }
xmlHttp.open("GET", url);
xmlHttp.onreadystatechange = callback;
xmlHttp.send(null);
}
3. 向服務器做出請求。可能調用servlet、CGI腳本,或者任何服務器端技術。
4. 服務器可以做你想做的事情,包括訪問數據庫,甚至訪問另一個系統。
5. 請求返回到瀏覽器。Content-Type設置爲text/xml——XMLHttpRequest對象只能處理text/html類型的結果。在另外一些更復雜示例中,響應可能涉及更廣,還包括JavaScript、DOM管理以及其他相關的技術。需要說明,你還需要設置另外一些首部,使瀏覽器不會在本地緩存結果。爲此可以使用下面的代碼:
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
6. 在這個示例中,XMLHttpRequest對象配置爲處理返回時要調用callback()函數。這個函數會檢查XMLHttpRequest對象的readyState屬性,然後查看服務器返回的狀態碼。如果一切正常,callback()函數就會在客戶端上做些有意思的工作。以下就是一個典型的回調方法:
function callback() {
   if (xmlHttp.readyState == 4) {
     if (xmlHttp.status == 200) {
          //do something interesting here
     }
   }
}
可以看到,這與正常的請求/響應模式有所不同,但對Web開發人員來說,並不是完全陌生的。顯然,在創建和建立XMLHttpRequest對象時還可以做些事情,另外當“回調”函數完成了狀態檢查之後也可以有所作爲。一般地,你會把這些標準調用包裝在一個庫中,以便在整個應用中使用,或者可以使用Web上提供的庫。這個領域還很新,但是在開源社區中已經如火如荼地展開了大量的工作。
通常,Web上提供的各種框架和工具包負責基本的連接和瀏覽器抽象,有些還增加了用戶界面組件。有一些純粹基於客戶,還有一些需要在服務器上工作。這些框架中的很多隻是剛開始開發,或者還處於發佈的早期階段,隨着新的庫和新的版本的定期出現,情況還在不斷髮生變化。這個領域正在日漸成熟,最具優勢的將脫穎而出。一些比較成熟的庫包括libXmlRequest、RSLite、sarissa、JavaScript對象註解(JavaScript Object Notation,JSON)、JSRS、直接Web遠程通信(Direct Web Remoting,DWR)和Rails on Ruby。這個領域日新月異,所以應當適當地配置你的RSS收集器,及時收集有關Ajax的所有網站上的信息!
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章