ajax|asp.net|web
提要 在過去的幾個月中,基於AJAX技術開發高度互動的Web應用程式的設計模式迅速流行開來。現在,具有高度可配置性的Web應用程式,例如Google Maps和A9,都在綜合利用這些技術來創造豐富的用戶端使用者體驗。其實,結合AJAX技術進行Web開發並非最近的研究成果,只不過這些技術一直以來不斷得到持續更新和改進。
本文中我有三個目的。首先,我想提供一個AJAX風格應用程式的進階概述。其次,我想詳細地描述ASP.NET 2.0的非同步回調機制。最後,我想對構建AJAX風格應用程式的工具和架構的未來改進作一下展望。
歸納來看,AJAX風格的Web應用程式展示了下列特徵:
· 到Web伺服器的非同步請求-在使用者等待來自於Web伺服器的響應時,瀏覽器使用者介面不會被堵塞,而是可以繼續響應使用者的互動。
· 高度依賴於用JavaScript編寫的基於瀏覽器的邏輯-W3C DOM的最新改進和標準化為實現動態用戶端UI更新提供了支援。
· 在瀏覽器和Web伺服器之間的基於XML資料的交換-XMLHttp對象使得與Web伺服器進行通訊而不需要重載頁面成為可能。
一個AJAX應用程式和傳統型Web應用程式之間的最大差別是,每次使用者互動不會導致每一個HTTP請求都被發送到Web伺服器;而是,用JavaScript實現的基於瀏覽器的邏輯掌握著控制權,之後再由該控制決定是局部處理請求還是向伺服器作非同步呼叫。一旦到伺服器的非同步呼叫結束,用戶端邏輯立即適當更新UI的相關部分。這種方式具有下列優點:
· 使用者體驗更為豐富。例如,當一個Google地圖使用者沿一個方向拖動地圖時,系統就會在後台向伺服器發出一個非同步請求,結果是他能夠在超出螢幕邊界後繼續拖動。這樣以來,當使用者進一步拖動地圖時,新的映像已經可用了。這導致一種響應更快的感覺。
· 既然跨越基於XMLHttp的到伺服器的調用狀態並沒有丟失,那麼,AJAX應用程式就可以避免每次都重建UI介面。
· 更多的邏輯位於瀏覽器端,從而減少了到Web伺服器的來回請求的數量,進而全面改進系統的潛力。
儘管存在這麼多的優點,然而AJAX風格的應用程式還是存在一些不足之處。例如,AJAX風格應用程式的開發是比較困難的,因為缺乏相應的架構(一組類似於Windows MFC工具包的UI類)和IDE(調試,可視化設計,等等)支援。另外,基於AJAX進行開發要求一個人必須至少掌握兩種語言(DHTML和JavaScript)。而且,AJAX風格應用程式的編碼需要更長的時間,因為它需要另外的測試以使其支援多瀏覽器版本和類型。最後,由於基於JavaScript的源碼為終端使用者可存取,所以開發過程中的安全分析也變得非常重要。
幸好,例如Atlas,AJAX.NET和Google Maps API等工具的出現為將來構建AJAX風格的應用程式提供了更好的支援。接下來,我們將討論一下,對於構建AJAX風格應用程式的支援技術的發展曆程以及我們能夠從最新發行的工具集Atlas得到怎樣的期望。
讓我們首先討論XMLHttp對象。這個對象最初為微軟所引入,以後在其它平台(包括Mozilla和蘋果公司的Safari瀏覽器)上也得到實現。XMLHttp支援到Web伺服器的非同步請求,這樣可以允許用戶端基於JavaScript邏輯調用Web伺服器而不需要重載整個頁面。
換句話說,在後台與Web伺服器的互動而不引起整個頁面重載是完全有可能的。
至於XMLHttp對象的使用則相當直接。為簡單起見,讓我們僅考慮IE特定的文法。其實,XMLHttp在其它瀏覽器上的實現文法與這裡的討論也很類似。
request = new ActiveXObject("Microsoft.XMLHTTP");
if (request){ request.onreadystatechange = CallbackHandler;
request.open("GET", URL, true);
request.send();
}
function CallbackHandler(){
if ((request.readyState == 4) && (request.status == 200){
string response = request.responseXML;
//更新UI的相關部分
}
}
在上面的代碼片斷中,第一步實現執行個體化Microsoft.XMLHttp類。第二步設定我們剛剛建立的XMLHttp執行個體的屬性,其中包括當XMLHttp請求完成時將得到控制的回呼函數的地址。因為我們在向伺服器作非同步呼叫(通過把open方法的第三個參數設定為true來實現),所以我們需要回呼函數的地址。在回呼函數實現過程中,我們作額外的檢查以確保完成請求。
[1] [2] [3] 下一頁