提要 在過去的幾個月中,基于ajax技術開發高度交互的web應用程序的設計模式迅速流行開來。現在,具有高度可配置性的web應用程序,例如google maps和a9,都在綜合利用這些技術來創造豐富的客戶端用戶體驗。其實,結合ajax技術進行并非最近的研究成果,只不過這些技術一直以來不斷得到持續更新和改進。
本文中我有三個目的。首先,我想提供一個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來實現),所以我們需要回調函數的地址。在回調函數實現過程中,我們作額外的檢查以確保完成請求。
新聞熱點
疑難解答
圖片精選