bababa Groupie
加入: 2004/5月/29
Online Status: Offline 回復: 46
|
Posted: 2004/5月/29 3:49下午 | IP記錄
|
|
|
學好一門編程語言有兩個條件是必不可少的,一是理論與實踐結合,在實際例程去驗證書本上的理論能加深你對理論的理解;二是學會總 結,把學習、運用中的心得體會記下來,當成一種經驗或者教訓加以提煉並在日後的應用中加以改進,一定能提高你對這門編程語言的認 識。以下是筆者在學習與運用ASP編程中的兩點經驗,希望能對大家有所幫助。 ASP網頁內VBScript和JScript的交互 ASP具備管理不同語言指令碼程式的能力,能夠自動調用合適的指 令碼引擎以解釋指令碼程式碼和執行內置函數。ASP開發環境提供了兩種指令碼引擎,即VBScript(缺省)和JScript 。不過,開發者並沒有被限制於只能使用這兩種語言,只要能夠提供合適的ActiveX指令碼引擎就能使用任何指令碼語言。 指令碼語言的選擇往往基於許多不同原因:它可能是開發者最為熟悉 的語言,可能是對給定工程來說能夠提供最多特色支持的,也有可能是最具效率的。不同的環境和要求使得我們在選擇指令碼語言時注重 不同的因素,同時也使得我們在某些時候面臨選定的指令碼語言不能直接提供其它語言固有的函數這一問題,或某個指令碼已經寫成但用 的卻是另外一種指令碼語言。 此時應該怎麼辦?是否需要用目前所用的指令碼語言重寫這些指令碼 ?或者說,是否有可能在一種指令碼語言中調用其它指令碼語言的內置函數?本文要說明的就是在ASP應用中如何讓VBScript 指令碼和JScript指令碼交互以最大限度地獲得兩種指令碼語言的特色支持。 一、VBScript和JScript的內置函數 在VBScript和JScript中,有大量的內置函數功能是 相同或類似的。然而,在一種指令碼語言中內置的函數並非總是在另外一種指令碼語言中也有對應的函數。例如,VBScript提供 了許多用於操作文字串和格式化資料的函數,這些函數在JScript中並不存在。這些函數包括StrReverse()、Fil ter()以及FormatCurrency()等。在另一方面,JScript所提供的用於管理數組、文字串編碼等的函數在V BScript中也沒有定義,如join()、reverse()、pow()、位操作、escape()和unescape( )等。 那麼,如果在JScript程式中需要一個VBscript函數該怎麼辦呢? 二、異種指令碼的互相調用 如果需要在JScript指令碼中調用一個VBScript中內置的函數,則應該寫一個VBScript使用者定義函數(在這裡 調用VBScript內置函數),然後在JScript指令碼中象調用公用JScript函數一樣調用這個使用者定義函數。 例如,如果要調用的VBSCript內置函數是FormatCurrency(),則可以聲明如下自定義函數: < SCRIPT LANGUAGE="VBSCRIPT" RUNAT="SERVER"> Function FormatValue(Value) FormatValue = FormatCurrency(Value) End Function < /SCRIPT> 接下來在JScript程式碼中就可以像普通JScript函數一樣調用FormatValue()了。用類似的方法也可以實現 VBScript程式碼調用JScript函數。 應用同樣的規則,我們可以在任何指令碼內調用任何使用者定義函數。不過,從JScript指令碼內調用一個不帶參數的VBScr ipt過程(Sub)時應略加注意,此時在JScript中應該像調用一個不帶參數的JScript函數一樣調用它,如用foo ()調用VBScript Sub foo過程。 三、資料共享 在某些情形下混合運用VBScript和JScript函數是非常有用的,但在不同語言指令碼之間共享資料也可能很有用。實現這 種共享的方法很簡單:不管使用的是什麼語言,只要是在網頁級聲明的變量就可以任意引用。 對象的使用方法也相似,可以任意選用合適的語言讀取、修改屬性或調用對象的方法。當然給定對象的屬性和方法是由創建該對像實例的 語言所定義的。正如上例VBScript的過程調用,當從JScript中調用一個不帶參數的VBScript對象的方法時,其 調用方法也遵從JScript的調用規則,反之亦然。 四、數組管理 數組共享問題稍微複雜一點。雖然數組也像其它變量一樣可以在不同語言指令碼之間共享,但必須注意兼容方面的問題。 VBScript數組在JScript下可以用VBScript的符號引用,即用myArray(2)引用數組元素而不是JSc ript的數組元素引用符號myArray[2] 。此外,還可以使用一個特殊的JScript對像——VBArray對像將VBScript數組轉換為JScript數組。下面 的程式碼從VBScript數組myVBArray創建JScript數組myJSArray: var Temp = new VBArray(myVBArray) var myJSArray myJSArray = Temp.toArray() 上述程式碼首先創建一個臨時的VBArray對象,然後使用它的toArray()方法將自己轉換為JScript數組。此後就 可以像普通JScript數組一樣使用myJSArray,如myJSArray [1]。但應當注意的是,toArray()方法將把一個多維的VBArray轉換為一維的JScript數組。 從VBScript中引用JScript數組更為複雜。雖然在VBScript中我們可以直接訪問JScript數組相關的方法 和屬性,但沒有直接訪問JScript數組的單個元素的方法。也就是說,我們可以在VBScript指令碼中讀取JScript 數組的長度屬性,如下所示: x = myJSArray.length 但無法直接讀取該數組的單個元素,下面的VBScript程式碼是不正確的: x = myJSArray(3) 解決該問題的一個可行的方法是執行一個轉換過程,如下面的程式碼所示,此處假定VBScript是缺省的指令碼語言: < % Dim Temp Dim myVBArray Temp = myJSArray.join(", ") myVBArray = Split(Temp, ", ") %> 此處的JScript join()方法將數組myJSArray元素轉換到一個以逗號為分割符的文字串,VBScript Split()函數將文字串轉換為VBScript數組。注意這裡我們是在VBScript環境下調用JScript的join 方法。依照此例,我們可以通過自定義VBScript函數來模擬JScript的VBArray對象的toArray()方法以 實現JScript數組到VBScript數組的轉換。 用模板建立動態ASP頁 對於模板,我想大家可能都有一些概念,在word中很多模板,設 計好了大概的版面,你只要用你自己的話填充那些佔位文字就好了。這兒的模板大概也就是這個意思,網頁中相對穩定的部分固定下來, 其他的部分根不同的情況在輸入不同的內容。其實在DreamWeaver中也有模板的功能,不過那個靜態的,只能手動填充內容, 而這兒講的是動態的自動的內容填充。 首先,我先來解釋一下為什麼要用到模板文件。有時候,模板能夠帶 給你對網頁功能和佈局更為完整的概念。當你看到Word的模板格式之後,就知道最後版面是個什麼樣子的了,在這兒也是如此。例如 ,你可以保留ASP語句,而使用不同的模板來建立不同的網頁風格。這樣,你就不用為每種不同風格的網頁分別來寫不同的ASP網頁 了,這顯然可以為我們節省很多時間和精力。而且,模板文件能夠讓你更容易的瀏覽網頁程式碼,不用擔心ASP和HTML的混雜搞的 你頭昏腦脹。你可以只用把注意力集中在HTML上,而完全不用去管ASP了。再有就是,摸板很簡單,你絕對很快就能搞懂搞定。在 這篇文章中,將會用到一個資料庫——一個用的很廣泛的僱員表。包括僱員ID,姓名,照片,以及工作摘要和照片的註腳。下面是這個 Access資料庫的結構: 文件名 - myDatabase.mdb 表名 - Employees ID 自動計數(Autonumber) FullName 文本 - 最多100個文字 PicURL 文本 - 最多255個文字 Duties 註釋類型 PicCaption 文本 - 最多50個文字 一個很簡單的資料庫,是吧。當然你可以按要求來擴展它,那就是你 自己的事了。我假設你已瞭解資料庫的基本操作,這樣我不用在這上面花太多的筆墨,其實這兒的程式碼都是很簡單的,只要你知道一些 基本的東西,就能把它看懂。建立了資料庫之後,我們可以開始建立模板文件了。這個文件是每個網頁的骨架。我沒有用到表格,那樣有 些麻煩,而我很懶:-)而且,也不用加入,標籤,因為那是要加在ASP網頁中的。所以到最後,它的樣子就是這樣了:
Full Name: %name% < br>Description of duties: %duties% This picture was taken: %date%
Employee ID: %empID% 就是這樣了!這就是一個簡單的模板。把它存為template. tmp,在後面的ASP網頁中將要引用到它。要注意的是:我們可以在模板中加入各種HTML標籤,你完全可以在摸版中定義好網頁 的結構和樣式,就像實際寫一個網頁一樣,只是要把關鍵的地方標出來——注意到了那些%圍著的東西了嗎?那就是模板的精髓了。或許 你已經注意到,那些%圍著的是和資料庫中的字段意義對應的。看看下面的ASP程式碼,是如何讀入模板和資料庫文件,把他們揉和在 一起,然後輸出我們想要的HTML網頁。 這就是所有的程式碼了,很簡單,不是嗎?它所作的只是打開模板文 件,按順序讀入每一行,然後用沖資料庫中讀入的實際的字段值來代替模版中那些%img%,%name%標記。而且,它還把在「D uties」字段內大段文本中的回車解釋成HTML的回車 ,這樣就不至於打亂整個的排版格式了。怎麼樣?輕鬆搞定吧。模板在某些應用上真的是可以發揮奇效,省時省力。理論上,你還可以修 改這段程式碼,用FileSystemObject來讀寫文本,這樣資料就不一定要儲存在資料庫中了。在一些應用中,比如即時的 新聞發佈,這樣也許更為方便一些。
|