原創(chuàng)|其它|編輯:郝浩|2009-12-25 10:45:09.000|閱讀 738 次
概述:本文希望為有一定基礎(chǔ)的Asp.net Ajax同學(xué)提供另外一個(gè)視角,進(jìn)一步的分析了解Asp.net Ajax的運(yùn)行機(jī)制。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
本文希望為有一定基礎(chǔ)的Asp.net Ajax同學(xué)提供另外一個(gè)視角,進(jìn)一步的分析了解Asp.net Ajax的運(yùn)行機(jī)制。
首先,源代碼從何而來?
我是用的笨方法(如果大家有好辦法,一定給我留言喲!):
在vs2008中,
1. 建一個(gè)普通的aspx頁面,F(xiàn)5,然后ViewSource,查看源代碼;
2. 在頁面引入ScriptManager,F(xiàn)5,再查看源代碼;并保存該頁面。
3. 將兩份源代碼進(jìn)行比較。
通過比較,我們發(fā)現(xiàn),引入了ScriptManager的頁面源代碼,多出了以下代碼:
__doPostBack函數(shù)
asp.net頁面機(jī)制的核心函數(shù),但與本系列主題關(guān)系不大,且網(wǎng)上資料極多,本系列暫時(shí)略過
一些好像js文件引用語法的代碼:
咦?這種代碼是什么意思?引用的*.axd文件,而且還有d=*,t=*的參數(shù)。
一些似乎是初始化(initialize)的代碼:
無論如何,先找到ScriptResource.axd文件吧。前面說過,我們查看aspx頁面源代碼的同時(shí),還保存了aspx頁面,因此在保存html文件的同時(shí),還會(huì)生產(chǎn)一個(gè)文件夾;就在這個(gè)文件夾下,我們清清楚楚的發(fā)現(xiàn),3個(gè)*.axd文件。試試看,居然能用記事本打開!里面就是不折不扣的js代碼呀。
對(duì)于ScriptResource.axd,我簡單的解釋一下(其實(shí)我的理解也不深,呵呵):
1. 和.aspx一樣,axd也是一個(gè)后綴名(基本上等于廢話)
2. asp.net通過檢查文件的后綴名,對(duì)文件采取不同的處理(HttpHandler)
3. 這種配置可以在web.config里找到
上面這句話的意思就是,對(duì)ScriptResource.axd這種“路徑”,調(diào)用System.Web.Handlers.ScriptResourceHandler類進(jìn)行處理。有興趣的同學(xué)可以用reflactor看一看這個(gè)類,這里不展開了。
而ScriptResource.axd后面帶的參數(shù):d是指經(jīng)過編碼的資源鍵,t是一個(gè)時(shí)間戳,指示這個(gè)程序集最后一次修改時(shí)間。再次加載這個(gè)頁面時(shí),頁面根據(jù)以上兩個(gè)參數(shù)判斷資源是否修改過,來決定重新加載或調(diào)用瀏覽器緩存。
WebResource.axd是類似的,但是asp.net2.0的機(jī)制,此處也只能暫時(shí)略過了。
OK!就此開始我們的探索之旅吧。
我們首先打開ScriptResource.axd文件。
今天我們先看這兩段代碼:
這就是“委托”和“回調(diào)”的實(shí)現(xiàn)。
我們發(fā)現(xiàn),這兩個(gè)方法里面使用了這兩個(gè)函數(shù)apply()和call(),這兩個(gè)函數(shù),是我們進(jìn)行下一步學(xué)習(xí)的關(guān)鍵。下一篇我們專門研究吧!
最后廢話幾句:
其實(shí),不僅Ajax,就是asp.net本身(指普通的WebForm),也只是(而且只能)利用JavaScript,form表單和服務(wù)端交互,關(guān)注研究aspx生成的頁面,能幫助我們更深入的了解asp.net的運(yùn)行機(jī)制。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園