ASP.NET Ajax學習筆記(2) -- Ajax.NET

    現在寫點在ASP.NET平臺中使用Ajax的一些學習體會.並且大概的寫一點對Ajax.NET這個開源框架的的認識.
 
   上一篇文章中寫到Ajax技術在任何平臺上都可以實現.那麼在.NET平臺中如何實現比較理想呢? 看了Ajax.NET這個框架(關於這個框架可以在ajax.schwarz-interactive.de 這裏找到,作者是Michael Schwarz),我想先把這個框架的基本思路說一下.
  1. 在.NET平臺上實現Ajax最重要的思想當然是"反射".在.NET程序集中保存着稱爲metadata的數據塊,這裏定義了該程序集中的類型信息以及類型的方法,屬性,字段等各種信息. 通過.NET Framework中提供的反射API,我們就可以輕鬆的讀取這麼數據.並且更加重要的一點是,這麼API允許我們在程序運行時動態加載某個程序集,並實例化該程序集的類型,類型實例化,我們就可以像平時寫程序那樣在運行時調用類型的各種成員.通過"反射"這種機制我們可以寫出非常靈活的程序.偉大的反射
  2. 有了"反射"機制我們可以在瀏覽器上傳遞我們要調用的程序集,方法名以及參數給服務器,服務器讀取這些值,並通過反射來調用相應的方法,再把調用方法返回的結果寫到Response對象中.返回後客戶端就可以通過這些返回值更新相應的控件了.
  3. 運用Ajax.NET框架需要自定義HttpHandler,在Web.config文件中需要有這幾行.

    <httpHandlers>
        
    <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
    </httpHandlers>

    它的作用是把所有指向ajax目錄下的以.ashx爲擴展名的請求都交給Ajax程序集中,命名空間爲Ajax的PageHandlerFactory類來處理.毫無疑問,該框架的請求都是這種形式的.
  4. 在服務器上部署了HttpHandler之後,接着要在客戶端瀏覽器上也部署相應的腳本,好讓javascript能夠直接像調用本地函數一樣調用服務器上的方法.那這一步如何部署呢?
    <script language="javascript" src="ajax/common.ashx"></script>
    <script language="javascript" src="ajax/NAMESPACE.PAGECLASS,ASSEMBLYNAME.ashx"></script>

      運用該框架時,頁面上都會有這兩行,這兩行腳本的作用就是返回javascript腳本,就像language屬性所指的那樣.仔細看一下,這兩行的src屬性就是指向ajax目錄下的某個.ashx資源,其中第一行都是一樣的,第二行會根據你要調用的程序集(ASSEMBLYNAME),命令空間(NAMESPACE)和類(PAGECLASS)而有所不同.第一行返回的是一個名叫ajax.js腳本,腳本的內容請看這裏http://blog.csdn.net/lembo520390/archive/2008/02/04/2083778.aspx 這裏定義了與XmlHttpRequest對象相關的一些函數,如建立xmlHttpRequest對象,發送請求,處理返回結果,處理錯誤等.這個腳本的功能是每一個Ajax框架都必須提供了.第二行中返回的腳本會根據你所請求的頁面而不同,這裏最主要的內容是定義了一個對象,這個對象以你要在服務器上調用的類的名字命名,該對象裏面的成員是該類中可以由Ajax方式調用的方法名(即在Ajax.AjaxMethod()屬性的方法),然後是一個通過ajax調用的js函數.看起來像這樣.
    var AjaxTest = {
        GetValue:
    function(str,str2,callback,context){
        
    return     new ajax_request(this.url + '?_method=GetValue&_session=no','str=' + enc(str)+ ' str2=' + enc(str2),callback, context);
        },
           url:'/ajax/ttAjaxTest,tt.ashx'

    }

    其中 AjaxTest這是這個類,而GetValue就是我們要在服務器上調用的方法名,這裏把該成員設置爲一個調用ajax_request的函數(該函數定義在ajax.js中),除了方法名之外這裏還包括了該方法的參數,這裏的str和str2,表示該方法接受兩上參數.另外還有是否使用session和返回後的回調用函數等.注意看這裏的url,指向的就是ajax目錄下的一個.ashx資源,該資源根本不存在, 不過沒關係,ASP.NET在找資源之前已經交給在web.config中定義的PageHandler處理了.該自定義的PageHandler的任務就是讀取請求的參數,運用"反射"調用相應的服務器端方法,並返回相應的結果.
  關於Ajax.NET如何實現這些步驟,在下一篇中再寫吧
發佈了14 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章