[返回]
计算机世界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%>”。