1、本章导读本章导读:ASP并不是脚本语言,需要使用脚本语言才能完成其动态网页的逻辑设计工作。在ASP的程序中,常用的脚本语言有VBScript和JavaScript两种。VBScript是ASP的默认脚本语言,属于Visual Basic的一个简化版本,可以直接嵌入HTML文件中,从而扩展HTML功能,使静态的HTML网页成为动态网页,实现客户端浏览器和Web服务器的交互功能。本章要点:客户端脚本和服务器端脚本数据类型常量和变量内置函数运算符程序结构Sub过程和Function函数 n3.1.1 客户端脚本客户端脚本 n3.1.2 客户端脚本功能客户端脚本功能 n3.1.3 常用事件常用事件 n
2、3.1.4 输入输出函数输入输出函数 n3.1.5 服务器端脚本服务器端脚本 3.1 脚本概述脚本概述 客户端脚本因为在客户端执行,其实和客户端脚本因为在客户端执行,其实和ASPASP没有关系,也就不需要没有关系,也就不需要IISIIS支持,支持,只要文件扩展名取只要文件扩展名取.htm.htm、.html.html即可。客户端脚本代码能够嵌入到即可。客户端脚本代码能够嵌入到htmlhtml文档文档的任何地方,通常是将所有脚本代码集中放在的任何地方,通常是将所有脚本代码集中放在headhead部分,这样可以确保在部分,这样可以确保在bodybody部分解释之前所有脚本代码都被读取并解码。其语法
3、格式如下:部分解释之前所有脚本代码都被读取并解码。其语法格式如下:script language=!-语法说明如下:语法说明如下:languagelanguage:指定脚本代码所使用的脚本语言。对于:指定脚本代码所使用的脚本语言。对于IEIE浏览器来说,该属性浏览器来说,该属性的取值可以是的取值可以是“VBScriptVBScript”或或“JavaScriptJavaScript”,前者也可以简写为,前者也可以简写为“VBSVBS”eventevent:指定脚本代码的关联事件,有关事件的详细信息,请参阅:指定脚本代码的关联事件,有关事件的详细信息,请参阅3.1.33.1.3节节 forfor
4、:指定与事件相关联的对象。:指定与事件相关联的对象。注释标记符号(注释标记符号(!-)是为了防止不支持客户端脚本的浏览器出错,)是为了防止不支持客户端脚本的浏览器出错,如如Netscape Netscape NavigatorNavigator浏览器浏览器不支持不支持VBScriptVBScript编写的客户端脚本编写的客户端脚本。3.1.1 客户端脚本客户端脚本3.1.1 客户端脚本客户端脚本实际编写客户端脚本代码时,一般有四种变化形式,下面举例说明:1.通过forevent属性调用事件过程设置标记的for属性以指定html页面中的一个对象,并通过event属性指定该对象的一个事件。2.通过
5、控件的事件调用事件过程在标记中定义一个通用sub过程,并通过对象的相关事件来调用该过程。3.在html标记属性中直接编写脚本代码若事件过程比较简单,则可以在对象标记中直接编写脚本语句。若包含多条语句,用冒号(:)分开各条语句。4.定义对象独立事件过程这种方式对事件过程的命名有严格的要求,要求过程名必须由对象名 下划线(_)和事件名组合而成,如button1_onclick()。客户端脚本也能够为用户提供一定的交互性,这种交互性主要体现在用户与本地计算机之间交互,需要IE浏览器的支持,如进行简单计算,验证输入数据的合法性和构建动感的视觉效果。又如,在将表单内容提交给服务器端之前,可用客户端脚本来
6、验证输入数据的合法性,这样无需连接服务器就能使用户得到及时的反馈。再如,可以根据用户的行为来产生有趣的网页视觉效果,如当鼠标移到一个特定的段落时,改变段落中的文本颜色。3.1.2 客户端脚本功能3.1.3 常用事件常用事件 nHTML文档中的每个标记都可以看作是一个拥有属性、方法和事件的对象,称为文档对象。事件是预先定义好的,能够被对象识别的动作。当文档对象触发某一个事件时,会做出某种方式的响应,产生具体的行为结果。这种具体的响应和行为结果需要由程序员编写脚本代码来实现,这段脚本代码称为事件过程。n在客户端运行时,VBScript是一种基于对象和事件驱动的脚本语言,主要是通过对浏览器中发生的事
7、件做出响应,从而实现其功能,常用的事件如表3-1所示。3.1.4 输入输出函数输入输出函数 n输入输出函数和3.6节介绍的函数一样都是VBScript内置函数,只不过这两个函数只能用于客户端脚本,不能用于服务器端脚本。1.输出函数msgbox 2.输入框函数inputbox1.输出函数msgbox消息框函数(msgbox)是常用的输出信息的函数。它在对话框中显示信息,等待用户单击按钮,并返回一个整数以标明用户单击了哪一个按钮。其语法格式如下:格式:返回值=msgbox(,helpfile,context)说明:msgbox函数只能用于客户端脚本代码,其中:信息内容:是显示在对话框中的字符串表达
8、式,其最大长度大约是1024个字符;对话框类型:是一个数值表达式,一般有三个参数组成相加而得到一个整型值。用于指定命令按钮的数目及类型、使用的图标样式和默认选择按钮等。各参数取值及其含义如表3-2 表3-3和表3-4所示。1.输出函数msgbox对话框标题:是显示在对话框标题栏中的字符串表达式;返回值:msgbox有返回值,指明在对话框中选择了哪一个按钮,返回值含义如表3-5所示。helpfile:字符串表达式,标识为对话框提供的帮助文件,须和context联合使用;context:数值表达式,标识帮助主题的上下文索引编号,须和helpfile联合使用。注意:如果省略了前面某些可选项,必须加入
9、相应的逗号分隔符。2.输入框函数inputbox输入框函数(inputbox)显示一个能接受用户输入的对话框,并返回用户在对话框中输入的信息。其语法格式如下:inputbox(,xpos,ypos,helpfile,context)说明:inputbox函数同msgbox函数一样,只能用于客户端脚本代码,其中:信息内容:是显示在对话框中的字符串表达式,其最大长度大约是1024个字符;对话框标题:是显示在对话框标题栏中的字符串表达式;默认内容:是显示在对话框文本输入框中的默认文本;xpos:指定对话框与屏幕左边缘的水平距离(单位为缇),省略时水平居中;2.输入框函数inputboxypos:指定
10、对话框与屏幕上边缘的垂直距离(单位为缇),省略时距屏幕上边缘1/3处;helpfile:字符串表达式,标识为对话框提供帮助文件,须和context联合使用;context:数值表达式,标识帮助主题的上下文索引编号,须和helpfile联合使用。注意:如果省略了前面某些可选项,必须加入相应的逗号分隔符。3.1.5 服务器端脚本服务器端脚本因在服务器端执行时而需要IIS支持,并且网页扩展名命名为.asp才能运行。服务器端脚本编写与客户端脚本略有不同,其语法格式如下:格式一:格式二:VBScript代码说明:使用格式一时,如果主脚本默认值不是VBScript,则需要使用指令将本页的脚本语言设置为VB
11、Script;格式二主要用于global.asa文件;和language之间需要有一个空格,且指令应放在网页的首行。3.2 VBScript3.2 VBScript的数据类型的数据类型 nVBScript语言只有一种数据类型,即变体类型Variant。Variant是一种特殊的数据类型,根据使用的场景,它可以担当不同类别的信息,如字符串、整数、日期等,这些用以区别数据信息的不同类别称为子类型。因为variant是VBScript唯一的数据类型,因此它也是VBScript中所有函数的返回值的的数据类型。表3-6列出了Variant包括的子类型:3.3 VBScript常量常量 n常量是指在程序执
12、行期间其值从不发生变化的量。在VBScript中,常量分为普通常量和符号常量。普通常量是指一个具体的数据,如“VBScript”表示一字符串,123.456e12和869d-8分别表示一单精度浮点数和一双精度浮点数,#1970-6-18#表示一日期;符号常量是指代表某一确切数据项的符号名称,符号常量又分为预定义符号常量和自定义符号常量。预定义符号常量由VBScript内在提供,如vbcrlf表示回车符和换行符的组合,vbgreen表示绿色的数值。n3.3.1 常量声明常量声明n3.3.2 常量命名规则常量命名规则 n3.3.3 常量引用常量引用n3.3.4 特殊常量特殊常量 3.3.1 常量声
13、明常量声明n普通常量和预定义符号常量,无需声明即可直接使用;用户自定义符号常量需要使用const语句声明,并给它们赋原义值。3.3.2 常量命名规则常量命名规则 n常量命名必须遵循这样的规则:n名字必须以字母开头,建议以const作为常量的前缀;n名字中不能含有句点;n名字不能超过255个字符;n名字不能和关键字同名,所谓关键字,就是dim,sub,end有特殊含义的字符串名称;n名字在被声明的作用域内必须唯一;n注意:VBScript不区分大小写。3.3.3 常量引用常量引用 n常量的引用非常简单,一旦声明,就可直接引用,比如:n3.3.4 特殊常量特殊常量 下面介绍几个特殊的常量empty
14、常量empty常量表示一个未初始化的变量。如果定义了一个变量,没有对它赋值,那么这个变量值就是empty。null常量null常量表示一个变量包含无效的数值,注意empty和null是不一样的。当在一个表达式中使用值为empty的变量时,如果它被用作数字,则它等于0;如果它被用作字符串,那么它就等于0长度字符串。null则不同,它表示变量中没有包含有效数据。3.3.4 特殊常量特殊常量nothing常量nothing用于断开对象变量和任何实际对象之间的链接,使用set语句可将一个对象变量设置为nothing,如:set 对象变量名=nothing通过把一个对象变量赋值为nothing,表明已经
15、使用完了变量所链接的对象,可以释放该对象所占用的内存以及分配给该对象的其它系统资源。如果有多个变量同时链接到一个对象,VBScript直到指向该对象的所有变量都设置为nothing时,才会释放该对象资源。true和false常量true的值为-1;false的值为0。3.4 VBScript3.4 VBScript变量变量 变量是用于标识计算机内存地址的名称,该地址可以存储脚本运行时能更改的数据信息。使用变量并不需要了解变量在计算机内存中的确切地址,只要通过变量名引用就可以查看或更改变量的值。3.4.1 变量声明变量声明3.4.2 变量赋值和引用变量赋值和引用 3.4.3 标量变量和数组变量标
16、量变量和数组变量 3.4.4 固定数组和动态数组固定数组和动态数组 3.4.5 变量作用域与存活期 3.4.1 变量声明变量声明声明变量有两种方式,即隐式声明和显式声明。nl 隐式声明脚本中首次使用时赋值即声明,无须dim语句,例如:当前日期和时间是:nl 显式声明赋值前先用dim语句声明,例如:3.4.1 变量声明变量声明nl l 强制声明变量为了避免隐式声明时,写错变量名引起的问题,最好使用语句强制要求显式声明所有变量,并将其写在所有asp语句之前,例如:运行时,将明确告诉没有声明变量cc。3.4.2 变量赋值和引用变量赋值和引用用dim 语句显示声明变量时,不能直接赋值,变量赋值要用到赋
17、值语句,变量的赋值语法格式如下:=变量的引用和常量相似,可以直接将变量赋值给另一个变量,也可以将变量引用到表达式中。3.4.2 变量赋值和引用变量赋值和引用intb then 比较inta和intb的大小intc=inta-intb 引用变量表达式inta-intbelseintc=intb 引用变量intaend if%3.4.3 标量变量和数组变量标量变量和数组变量大多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量,简称变量。有时候,将多个相关值赋给一个变量更为方便,包含一系列值的变量,称为数组变量,简称数组。数组变量的命名、声明、赋值,引用和标量变量基本相同,唯一的
18、区别是操作数组变量时变量名后面带有括号()。下例是一个简单的例子:n3.4.3 标量变量和数组变量标量变量和数组变量说明:在VBScript中不能定义数组的下界,括号中的数字指出数组的上界;数组元素的索引序号是从0开始计数的;在数组中使用索引为数组的每个元素赋值,如a(0)=256是将数据256赋给数组的第一个元素a(0);使用索引可以检索,引用数组元素的数据,例如:somevariable=a(8);区分是数组还是数组元素,关键看是不是赋值语句。数组并不仅限于一维,数组的维数最大可以为 60。声明多维数组时用逗号分隔括号中每个表示数组维度大小的数字在下例中,mytable 变量是一个有6行和
19、11列的二维数组:在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。3.4.4 固定数组和动态数组固定数组和动态数组在基于0的数组中,数组元素的数目总是括号中显示的数字加 1,这种固定大小的数组被称为固定数组。如上例:dim a(10)和dim mytable(5,10)。也可以声明动态数组,即数组元素的数目多少可发生变化的数组。对动态数组的声明也是使用dim 语句或redim 语句。但是声明动态数组时,括号中不包含任何数字。例如:要使用动态数组,必须随后使用 redim 确定维数和每一维的大小。在下例中,redim 将动态数组的初始大小设置为 3,而后面的 redim 语句
20、将数组的大小重新调整为二维数组,同时使用 preserve 关键字在重新调整大小时保留数组原来的内容。3.4.4 固定数组和动态数组固定数组和动态数组重新调整动态数组大小的次数是没有任何限制的,将数组的大小调小时,将会丢失被删除元素的数据。3.4.5 变量作用域与存活期变量的作用域是指变量的作用范围,变量的作用域由声明它的位置决定。过程内部声明的变量称为过程级变量或局部变量,这样的变量只能在声明它们的过程中才能使用,即无法在过程外部访问;过程外部声明的变量称为脚本级变量或全级变量,同一个.asp文件中的任何脚本命令均可以访问和修改该变量的值。过程级变量和脚本级变量可以同名,两者同名时,改变其中
21、一个变量的值不会影响另一个变量的值。变量存在的时间称为存活期。脚本级变量的存活期从被声明的一刻起,直到脚本运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别。3.5 VBScript3.5 VBScript运算符运算符 nVBScript的运算法则同其它编程语言一样,首先计算算术运算符,然后计算比较运算符,最后计算逻辑运算符。如果运算符的优先级相同,哪么按照从左到右的顺序计算各运算符,运算符及优先级顺序如表3-7所示。3.6 VBScript
22、3.6 VBScript函数函数 nVBScript提供了大量的内部函数,可以在脚本代码中直接调用这些函数。恰当地使用已有的函数,可以节省大量的编写代码时间,下面依次介绍常用的函数。n3.6.1 数学函数数学函数 n3.6.2 字符串函数字符串函数 n3.6.3 日期和时间函数日期和时间函数 n3.6.4 转换函数转换函数 n3.6.5 检验函数检验函数 3.6.1 数学函数数学函数3.6.2 字符串函数字符串函数3.6.3 日期和时间函数日期和时间函数3.6.4 转换函数转换函数3.6.5 检验函数检验函数 3.7 3.7 程序结构程序结构 nVBScript同其它编程语言一样也提供了三种基
23、本程序结构:顺序结构、分支结构和循环结构。任何算法的实现都可以通过这三种结构完成设计。顺序结构是最基本的结构,下面讨论分支结构和循环结构。n3.7.1 分支结构分支结构 n3.7.2 循环结构循环结构 3.7.1 分支结构分支结构ifthenelse语句和select case语句是VBScript提供的两种分支结构。使用分支结构可以编写进行判断和选择操作的VBScript代码。1.ifthenelse语句ifthenelse语句用于判断条件是true或false,并且根据判断结果指定要执行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式。有关比较运算符的详细信息,请参阅3.5节。
24、分支结构通常有以下几种形式:3.7.1 分支结构分支结构n单分支结构n这是一种简单分支结构,省略了else子句,条件为true 时执行语句,语法结构如下:nif thenn语句序列nend ifn说明:条件表达式为true时运行ifend if之间的语句序列,否则不运行。3.7.1 分支结构分支结构二分支结构if.then.else 语句定义了两个可执行语句块,条件表达式为true 或false 时分别执行其中一支语句块。语法结构如下:if then语句序列1else语句序列2end if说明:条件表达式为 true 时运行thenelse之间语句块,条件表达式为 false 时运行elsee
25、nd if之间语句块。3.7.1 分支结构分支结构多分支结构ifthenelse 语句还可以根据需要进行嵌套,语法结构如下。if then if then if then end if end ifend if当嵌套层次很多的时候,难免让人眼花缭乱。这时可通过添 加 e l s e i f 子 句 的 办 法 去 掉 嵌 套 层 次,扩 充if.then.else 语句的功能,使之变成多分支结构,从而实现对多个条件依次进行判断选择。多分支结构如下:if then语句序列1elseif then语句序列2elseif then语句序列3else语句序列nend ifn说明:n如果条件表达式1成立
26、,那么就执行语句序列1;n如果条件表达式1不成立,那么就判断条件表达式2 是否成立,如果条件表达式2成立,那么就执行语句序列2;n如果条件表达式2不成立,那么就判断条件表达式3 是否成立,如果条件表达式3成立,那么就执行语句序列3;n依此类推,如果ifelse中的判断条件表达式都不成立,那么就执行语句序列n。3.7.1 分支结构分支结构n2.select case 语句n使用多个elseif 子句往往会使程序变得难以理解,在多个条件中进行选择的更好方法是使用 select case 语句。nselect case 结构是if.then.elseif 结构的一种变通形式,可以从多个语句块中选择执
27、行其中的一个语句块。select case 语句提供的功能与if.then.elseif 语句类似,但是可以使代码更加简练易读。其语法结构如下:3.7.1 分支结构分支结构select case变量或表达式case 值1语句序列1case值2语句序列2case值n语句序列ncase else语句序列n+1end select3.7.1 分支结构分支结构n说明:nselect case 结构在其开始处使用一个只计算一次的简单测试表达式;n表达式的结果将依次与分支结构中case值比较,一旦匹配,就执行该case 关联的语句块,然后执行end select后面的语句;n若所有的case值都不满足表达
28、式的结果,如果有case else的语句,则执行case else关联的语句。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:语法结构一:do while语句序列loop说明:先判断条件,当条件为 true 时才会执行循环体语句 3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:语法结构二:do语句序列loop while说明:先无条件执行循环体一次,然后再判断条件,当条件为true时才会继续执行循环体。3.7.2 循环结构循环结构循环结
29、构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:语法结构三:do until语句序列loop说明:先判断条件,当条件为 false 时才会执行循环体。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:语法结构四:do语句序列loop until说明:先无条件执行循环体一次,然后再判断条件,当条件为false时才会继续执行循环体。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:n语法结构五:nw
30、hilen语句序列nwendn说明:当条件为 true 时循环。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:n语法结构六:nfor=to step n语句序列nnextn说明:指定循环次数,使用计数器重复运行语句。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:n语法结构七:nfor each in n语句序列nnextn说明:遍历循环,遍历集合中或数组中的每个元素,并重复执行循环体语句。3.7.2 循环结构循环结构循环结构用于重复
31、执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:n语法结构七:nfor each in n语句序列nnextn说明:遍历循环,遍历集合中或数组中的每个元素,并重复执行循环体语句。3.8 VBScript过程和函数n在VBScript中,可被调用的程序段分为两种:一种是sub 过程,另一种是function函数。sub 过程只执行程序而没有返回值,而function函数有返回值。3.8.1 Sub过程过程 VBScript的sub过程分为事件过程和通用过程两种。客户端脚本主要使用事件过程,即当某个事件发生时,对该事件做出响应的程序段,而通用过程是独立于事件的程
32、序段,可以被其它过程调用。sub过程是指包含在sub 和end sub 语句之间的一组VBScript 语句,执行操作但不返回值。语法结构如下:sub 过程名(形参1,形参2)局部变量定义语句序列1exit sub语句序列2end sub 说明:定义形参时不能赋值,如果sub过程无任何参数,则sub过程名后仍然包含空括号();可以使用exit sub语句从sub过程中退出;过程的调用有两种形式:nl 使用call语句语法格式:ncall 过程名(实参1,实参2,)nl 不使用call语句语法格式:n过程名 实参1,实参2,n形参和实参可以同名。3.8.2 Function 函数function
33、函数,是包含在 function 和 end function 语句之间的一组 VBScript 语句。function函数与sub 过程类似,但是 function函数可以有返回值。语法结构如下:function 函数名(形参1,形参2)局部变量定义语句序列1函数名=返回值exit function语句序列2函数名=返回值end function 3.8.2 Function 函数n说明:n定义形参时不能赋值,如果function 函数无任何参数,则 function 函数名后仍然包含空括号()。nfunction函数通过函数名返回一个值,这个值是在function函数体内(预定义时)通过赋
34、值语句赋给函数名的。function 返回值的数据类型总是variant。n可以使用exit function语句从function 函数中退出。nfunction函数的调用只有一种形式,即赋值调用,语法格式如下:n=函数名(实参1,实参2)。n形参和实参可以同名。3.9 3.9 本章小结本章小结 nVBScript是ASP编程默认的脚本语言,是微软专门为浏览器IE(Internet Explorer)开发的编程语言。使用VBScript的目的是控制页面内容,增强网页的动态交互性。本章重点介绍了VBScript的语法规则,VBScript的数据类型、常量以及变量,VBScript的过程与函数以及程序结构。