[返回]
计算机世界2001年第4期

ASP中值的传递

人民银行济南分行清算中心 张立锋
山东省水利科学研究院 张 禾

  ASP是基于Server端的脚本运行环境,它简单易用,支持多用户、多线程,在Web开发中得到了广泛的应用,常用的ASP开发语言有VB Script 和JavaScript。

ASP脚本可分为Client端脚本和Server端脚本。它的执行过程如下:首先,Web服务器解释执行Server端脚本,解释执行完毕后,把脚本转化为HTML的形式并传给Client端。至于Client端脚本,Web服务器则原封不动地传给Client端,由Client端解释执行。下面介绍不同情况下值的传递方法。

Client to Client

这种情况与VB、VC编程相似,可以通过全程变量或函数的值传递实现Client端至Client端值的传递,并且VB Script 和JavaScript之间也可实现值的传递和函数调用。下面简单给出其实现程序:

<script LANGUAGE=JavaScript>

< !--

’用JavaScript语言定义一全程变量

var myTest

-->

</script>

<script LANGUAGE=VB Script>

< !--

’用VB Script语言定义一全程变量

dim strFxzl

sub VbCallJava(myvalue)

’ 全程变量赋值

strFxzl = myvalue

’ 全程变量赋值

myTest = myvalue

’ 通过参数传递值

call ShowMessage2(strFxzl)

’ 通过全程变量传递值

ShowMessage

’用VB Script调用JavaScript编写的函数

call ShowMessage1(strFxzl)

end sub

sub ShowMessage()

msgbox strFxzl

end sub

sub ShowMessage2(strTemp)

msgbox strTemp

end sub

-->

</script>

<script LANGUAGE=JavaScript>

< !--

function ShowMessage1(strTemp)

{

window.alert(strTemp);

}

function JavaCallVb(strTemp)

{

’用JavaScript调用VB Script编写的函数

ShowMessage2(strTemp);

}

-->

</script>

Server to Server

这种情况与Client端至Client端值的传递方式相似,但是其全局变量不仅包括Client端至Client端通常意义的全局变量,还包括Session变量和Application变量,在此不再赘述其实现方法。

Client to Server

这种情况利用Request 对象传递Client端至Server端的值,包括从 HTML Form用POST方法或 GET方法传递的值、Cookie值和ServerVariables值。

例如:

<select name=“fxzl” size =1>

<option value=“受理行”>受理行</option>

<option value=“发卡行” selected>发卡行

</option>

</select>

<form action=“db_pag.asp” method=“post” id=form1 name=form1 >

< center >< input type=“submit” name =“tj” value=“提交” >

</center></form>

在db_pag.asp页面可以利用Request.querystring(“fxzl”)得到Client 端传递的值,也可以利用Request. ServerVariables(“ALL_HTTP”)得到Client端发送的所有 HTTP 标题文件。

Server to Client

我们先看下面的例子。这个例子实现了Server端向Client端传递时间信息,在页面上有两个Select控件和一些Radio控件分别显示年、月、日。当用户从这个页面跳转到另外一个页面时,利用Session变量strKssj保存时间值;当用户返回这个页面时,控件显示用户离开这个页面之前的值。

<%@ Language=VB Script %>

<%

’Server端脚本,在变量中设置年、月、日的值

dim strYear,strMonth,strDay ’Server端变量

’Session变量初始化

if session(“strKssj”) = “” then

strYear =year(date())

strMonth = month(date())

strDay = day(date())

else ’得到Session变量中时间值

strYear =left(session(“strKssj”),4)

strMonth =int(mid(session(“strKssj”),5,2))

strDay =right(session(“strKssj”),2)

end if

%>

<SCRIPT LANGUAGE=VB Script>

< !--

’Client端脚本,设置年、月、日三个控件的显示值

document.form1.year.value=“<%=strYear%>”

document.form1.month.value=“<%=strMonth%>”

document.form1.day(int(“<%=strDay%>”)-1).checked=true

-->

</SCRIPT>

不能简单地在Client端写入document.form1.year.

value=strYear,因为这样Client端会将strYear 认为是Client端变量,Server端不能给Client端变量赋值,而<%=strYear%>则先被Server端解释执行为一个值。以1999为例,此时,Web服务器向Client端传递的是document.form1.year.value=“1999”,而不是document.form1.year.value=“<%=strYear%>”。