有了前面的html中關於form的強化知識,是不是在想,下面就可以開始ASP之旅呢?未必。
一般系統學過ASP的編程人員都會切身體會到:在系統學習ASP的內建對象和內建群組件之前,學會指令碼語言永遠是至關重要的。
為什麼這麼說呢?為什麼要學指令碼語言呢?ASP和指令碼語言又有什麼關係呢?
首先說說ASP是貴為何物吧。ASP是Microsoft Active Server Pages的簡稱,它是一種伺服器端指令碼環境,可用來建立互動式 Web 頁並建立強大的 Web 應用程式。可以表明ASP是一種基於伺服器端的指令碼環境,那就明白ASP為什麼需要IIS支援了,因為IIS即為常用的一類web伺服器;那也就明白為什麼要學指令碼語言了,因為ASP提供的是一種指令碼環境。
再次需要說明的是,ASP只是一種環境,而非一種語言。如果真要形象化地說是ASP是網路程式設計語言的話,那也是屬於一個html+指令碼+asp提供的內建對象及組件的功能強大的混合語言。
所以,學點指令碼非常重要!其實無論是學指令碼語言,還是其它語言,我認為首先需要瞭解的是該語言涵蓋的各類特性,包括:資料類型、事件、方法、 對象、屬性、文法等當然這都是些空談,正如在大學課堂上的某電腦語言課一樣,搞純研究性的就是覺得有些索而無味。還是實用些的好,能解決問題的程式才是好程式(印證能逮到老鼠的貓就是好貓的經典聖語,呵呵)
當然,語言這東西還是要你去好好鑽研的,比如你寫求絕對值的程式,其實一個abs()函數就搞定了。再比如你會vb指令碼,但把同樣程式替換成java指令碼就會出錯,它們的資料類型不同,語句文法也不一樣啊。正如說中文和外文一樣,要會發音標(資料類型),會如何發音(方法),如何說成一句話(文法)……呵呵,有點讓你難受吧。行!直接了當。你以後需要注意的是語言的函數、文法。當然也不是讓你全看,按照教程中的遇到一個掌握一個。教程學完,差不多也結束了。呵呵,你要相信我。
目前有兩種主要的指令碼語言:VbScript和JavaScript。因為VbScript作為IIS預設的伺服器指令碼,所以我們所談所學的基本是圍繞VbScript為指令碼的ASP的,當然也不排除有的時候使用javascript.
舉一個很簡單的例子:
<script language="vbscript"><br /><!--<br /> sub button1_onclick<br /> msgbox (" 歡迎使用vbscript! " )<br /> end sub<br />--><br /></script></p><p><script language="javascript"><br /><!--<br /> function b213()<br /> {<br /> alert("歡迎使用javascript!")</p><p> }<br />--><br /></script><br /><form><br /><input type="button" name="button1" value="vbs"><br><br /><input type="button" name="button2" value="js" onclick="b213()"><br /></form><br />vbscript中的Sub 就是一個事件程序。過程名包含兩部分:一部分為按鈕名,即 Button1(從 < INPUT > 標記中的 NAME 屬性擷取);另一部分為事件名,即 OnClick。兩部分由底線 (_) 串連。單擊按鈕時,Internet Explorer 尋找並運行相應的事件程序,即 Button1_OnClick,而MsgBox 就是一個函數,對於它更具體的參數,你就好好看下了。<br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
一時來勁,可能大家都看到網上有種狂噁心的對話方塊組,原理是什麼呢?請看:
<script language="vbscript"><br />msgbox"你知道你會點確定的。。。。。。。"<br />msgbox"不點也要點。。。。。。。。"<br />msgbox"沒辦法是吧。。。。。。。。。。?"<br />msgbox"要不網頁打不開啊。。。。。。"<br />msgbox"這招損人吧。。。。。。。。。"<br />msgbox"真想揍揍站長。。。。。。。。。"<br /></script><br />其實站長用這些玩弄別人的時候,先玩弄了自己:因為這都是他想出來的啊:)<br />呵呵,我沒有損大家的意思,只是為了學習。<br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
在來個開頁和退頁彈出對話方塊的原理吧
<script language="vbscript"><br /><!--<br />sub window_onload()<br /> msgbox"welcome you!"<br />end sub<br />sub window_onunload()<br /> msgbox"see you late!"<br />end sub<br />--><br /></script><br />開頁顯示“welcome you!”,關頁顯示“see you late!”<br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
以上只是一個顯示對話方塊msgbox,當然還有書寫對話方塊inputbox也順便看下吧。
<script language="vbscript"><br /><!--<br />dim strname<br />strname=inputbox("enter your name please:","enter your name","cnbruce")<br />document.write(strname&",welcome you!<p>")<br />--><br /></script><br />有關inputbox的想關參數也去看看吧。<br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
再來看看幾個實用的函數:
len():返回字串長度或者變數的位元組長度
lef():截取一個字串的前部分內容
right():截取一個字串的後部分內容
<script language=vbs><br />text="1234567890abcdefgh"<br />i=10</p><p>lentext=len(text)<br />lefttext=left(text,i)<br />righttext=right(text,i)</p><p>alert ("文本長度是:"&lentext)<br />alert ("文本左取"&i&" 得的是:"&lefttext)<br />alert ("文本右取"&i&" 得的是:"&righttext)<br /></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
根據這幾個,經常看到的長文章後面加“......”的情況就是如下:
<script language=vbs><br />text="123 4567 8fds90 abcde fghxcfv"<br />i=10<br />if len(text)>i then '如果文本長度大於給定的值<br />text=left(text,i) '則提取前段的i位的字串<br />alert (text&"...")<br />else<br />alert (text)<br />end if<br /></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
還有個比較重要的函數replace()
在字串中尋找,替代指定的字串
replace(strtobesearched,strsearchfor,strreplacewith)
strtobesearched是字串; strsearchfor是被尋找的子字串;strreplacewith 是用來替代的子字串。
下面的一個就是很有用的文字轉換程式
<script language=vbs><br />text="媽的,我操"</p><p>text=replace(text,"媽的","MD")<br />text=replace(text,"操","CAO")<br />alert (text)</p><p></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
經常在發送EMAIL時,添加多個地址,中間採用“;”號進行分隔,那具體怎麼分解接受過來的多個EMAIL地址呢?採用Split函數:Split 函數從字串中返回數組。
<script language=vbs><br />cnbruce="cnbruce@126.com;cnbruce@it365cn.com;root@cnbruce.com"<br />MyArray = Split(cnbruce, ";")<br />a=MyArray(0)<br />b=MyArray(1)<br />c=MyArray(2)<br />alert(a)<br />alert(b)<br />alert(c)<br /></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
這些都是比較現實較好玩的些,玩中學習也不錯:)但畢竟我們是要編程的,說到編寫程式,我知道程式結構可以分:
1,順序結構:就是最普通的,從上往下,從左往右執行的程式
2,選擇結構:給你兩個條件,要不這樣(if ... then),要不那樣(else),任君選擇:)
3,迴圈結構:給你一個最大發揮的空間,在不超出這個範圍內進行活動(迴圈),否則自動結束(跳出迴圈)。
再複雜的程式也無非是由這三種結構綜合嵌套運用過來的,你說是吧。
順序結構沒多少要說,因為程式執行基本都是這方向。
來看看選擇結構,當然選擇結構也可以嵌套。
<body><br />hello,<br /><script language="vbscript"><br /><!--<br />dim thishour<br />thishour=hour(time)<br />if thishour<=12 then<br /> document.bgcolor="red"<br /> document.fgcolor="black"<br /> document.write("上午好!")<br />else<br /> if thishour<=18 then<br /> document.bgcolor="blue"<br /> document.fgcolor="white"<br /> document.write("下午好!")<br /> else<br /> document.bgcolor="green"<br /> document.fgcolor="yellow"<br /> document.write("晚上好!")<br /> end if<br />end if<br />--><br /></script><br />本頁的作用是根據不同時間顯示不同顏色和歡迎資訊。<br /></body><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
以上程式很簡單吧,只要能認識英文就會懂程式(我是這麼理解的:)
先把現在的小時提交出來:hour(time);
然後和12比較判斷,如果<=12,肯定是上午了,否則就是下午和晚上;
否則裡面繼續條件判斷,如果時間再<=18的話,那肯定就是下午了;
最後,不用說,瞎子猜猜也知道是晚上了:)
有關上一程式中的document.bgcolor就是文檔的背景色,document.fgcolor就是文檔的前景色彩(文字色),下一程式是動態改變背景顏色的。
<script language="vbscript"><br /><!--<br />sub setbgcolor(bcolor)<br /> document.bgcolor=bcolor<br />end sub<br />--><br /></script><br /><form><br /><input type="radio" name="color" onclick=setbgcolor("red")>red<br><br /><input type="radio" name="color" onclick=setbgcolor("green")>green<br><br /><input type="radio" name="color" onclick=setbgcolor("blue")>blue<br><br /><input type="radio" name="color" onclick=setbgcolor("yellow")>yellow<br><br /><input type="radio" name="color" onclick=setbgcolor("gray")>gray<br><br /></form><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
有關條件選擇結構的嵌套再show出一個表單檢測的程式
<html><head><title>abc</title><br /><script language="vbscript"><br /><!--<br />sub btnsubmit_onclick<br /> if form1.name.value<>"" then<br /> if form1.addr.value<>"" then<br /> if form1.email.value<>"" then<br /> if instr(form1.email.value,"@")<>0 and instr(form1.email.value,".")<>0 then<br /> form1.submit<br /> else<br /> alert"email error!"<br /> end if<br /> else<br /> alert "enter your email!"<br /> form1.elements("email").focus<br /> end if<br /> else<br /> alert "enter your address!"<br /> form1.elements("addr").focus<br /> end if<br /> else<br /> msgbox "enter your name please!"<br /> form1.elements("name").focus<br /> end if<br />end sub<br />--><br /></script><br /></head><br /><body><br /><form name="form1" method=post action="bug.html"><br />your name:<input type="text" name="name"><br><br />your addr:<input type="text" name="addr"><br><br />your email:<input type="text" name="email"><br><br /><input type="button" name="btnsubmit" value="submit"><br /></form><br /></body><br /></html><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
程式是給出來了,但看起來比較難懂,有時程式執行時間也比較重要,所以得精簡程式碼。
正所謂:寫程式容易,寫經典程式難啊,那上面的程式還可以換種思維方式。改用javascript(註:學的是編程思想,不要太過計較指令碼類型)
<html><head><title>abc</title><br /><script language="javascript"><br /><!--<br />function form1_onsubmit()<br />{<br />if (document.form1.name.value=="")<br /> {<br /> alert("請設定您的登陸名。")<br /> document.form1.name.focus()<br /> return false<br /> }<br />else if(document.form1.addr.value=="")<br /> {<br /> alert("請填寫您的地址。")<br /> document.form1.addr.focus()<br /> return false<br /> }<br />else if(document.form1.email.value=="")<br /> {<br /> alert("請填寫您的E-Mail地址。")<br /> document.form1.email.focus()<br /> return false<br /> }<br />}<br />--><br /></script><br /></head><br /><body><br /><form name="form1" onsubmit="return form1_onsubmit()"><br />your name:<input type="text" name="name"><br><br />your addr:<input type="text" name="addr"><br><br />your email:<input type="text" name="email"><br><br /><input type="submit" name="submit" value="submit"><br /></form><br /></body><br /></html><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
最後來看下迴圈結構吧:1到500可不是一個一個寫出來的。
<script language=vbs><br />for i= 1 to 500<br />document.write(i&"<br>")<br />next<br /></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
當然迴圈不只可以用for,還可以用do while...loop等
反正程式這東西是代替我們少做了許多重複單一無聊的事——只要你合理利用程式。
應該有些成就吧,學語言,學編程就是學文法語義,學編程架構思想。
當然這要你有紮實的本語言的基礎,基礎是什嗎?你知道哪些函數嗎?你知道怎麼用程式怎麼判斷偶數嗎(包含了運算)?你知道如何進行表單檢測嗎?你知道哪三種程式架構嗎?
函數參看:
http://www.cnbruce.com/blog/showlog.asp?cat_id=26&log_id=245
呵呵,把以上的程式吃透,最好再多看看指令碼參考手冊,跟我就可以開始ASP的上路了。
補:
Function過程與Sub過程類似,但是Function過程可以傳回值。
Function過程也可以使用由調用過程傳遞的常數、變數或運算式作為參數。如果Function過程無任何參數,則Function語句必須包含括弧()。
Function過程通過函數名返回一個值,這個值是在過程的語句中賦給函數名。Function傳回值的資料類型總是Variant。