这次谈asp的执行过程,首先当浏览器向服务器发出请求,说我要浏览一个叫1.asp的文件,那么服务器首先会从文件系统中找到这个文件,然
后分析其代码,如果代码中含有<%%>标记,那么服务器会去执行其中的代码,例如从数据库取出页面代码要求的数据,并写到页面上,最后生
成一个全部都是html代码的页面,这是一个文本性质的东西(在页面打开后你去读它的源文件,服务器生成的就是这个)然后浏览器分析这个
页面并在窗口里画出这个页面(为什么我要用画?)
以上讲述的是大致的执行过程,那么这里反映出来什么问题呢?
1是代码执行先后的问题,2是代码执行的地点,先被执行的是asp代码,其次被执行的是html与客户端脚本,asp代码在服务器执行,那么html
与客户端在浏览器执行,但是有时代码也并不是完全按照这个过程走,如果希望用客户端脚本与asp代码共同去控制一个逻辑,有的时候就会出
现问题
现在以一个用户登陆以及验证的过程来说明,现在希望的效果时取得用户登陆的帐号和密码然后去和数据库中的数据去比对,如果存在用户且密
码正确用脚本弹出一个对话框显示欢迎信息,然后进入index.asp否则用对话框显示出错信息,然后重新打开登陆页
<%
'chk.asp
dim user ,password
user=request.form("text1")
password=request.form("text2")
if user<>rs("user") or password<>rs("password") then
%>
<script language="javascript">
alert("对不起,用户名或密码错误,请查证后再登陆.!!");
</script>
<% Response.redirect "denglu.asp"%>
<%else %>
<script language="javascript">
alert ("欢迎你来到");
location.href='index.asp';
</script>
<%end if%>
现在如果登陆成功一切都是按照预想的执行的,提示欢迎信息然后进入index.asp但是如果登陆失败呢?则直接进入denglu.asp出错信息根本不
显示?为什么?好,我们来分析页面
<%
'chk.asp
dim user ,password
user=request.form("text1")
password=request.form("text2")
'获得用户登陆时提交的用户名和密码,没有问题
if user<>rs("user") or password<>rs("password") then
'比对帐号与密码
%>
<script language="javascript">
alert("对不起,用户名或密码错误,请查证后再登陆.!!");
//登陆失败,提示错误信息
</script>
<%
Response.redirect "denglu.asp" '转向到登陆页
%>
你会想了,那么问题出在哪呢?提示完出错信息正好进入登陆页呀,我if什么的编写都对,恩,其实你忽略了一个问题,代码执行的先后,首
先服务器分析到了if以后,如果条件为false,那么处理你针对登陆失败而编写的语句,对于你的html的部分不做任何改变与执行,只是保留原样
,这些是留给你的浏览器执行的,然后执行下一句<% Response.redirect "denglu.asp"%>恩,注意,这一句是要被执行的,而且是马上执行,
那么会有什么样效果呢?服务器停止正在处理的chk.asp转而去查找denglu.asp,然后将处理过denglu.asp发送到你的浏览器,而被解释了一半
的chk.asp根本不会发送到你的浏览器,所以你根本不会在浏览器的地址栏里看到chk.asp,所以chk.asp页上的script脚本根本也没机会给你的
浏览器去执行,所以当然不会提示你想要的错误信息
那么代码改成什么样呢?按照登陆成功的方法处理登陆失败就可以
<%
dim user ,password
'user=request.form("text1")
'password=request.form("text2")
user="lishujun"
password="12345"
if user<>"lishujun" or password<>"123456" then
%>
<script language="javascript">
alert("对不起,用户名或密码错误,请查证后再登陆.!!");
location.href='denglu.asp';
//从浏览器发出请求
</script>
发表于 @ 2007年04月25日 14:00:00|评论(loading...)|编辑