javascript里的变量问题 <% %>定义的变量是服务器端的变量,而<SCRIPT>里的是客户端变量客户端可以调用服务器端的,反之则不可以 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼上的,看清楚<script runat=server>,是服务器端脚本。两者区别在于<%%>中客户端看不到代码,而<Script>中的客户端可以看到。两者的变量也不能互相访问,但script中变量可以用<%=xxx%>方式赋值。 好象<script runat=server>在客户端也是看不到的而且好象也不能在<script runat=server>标记中用<%=xxx%>方式赋值有谁理解的比较深,能从服务端的行为模式来解释一下它们的异同呢?可以加分,多少都可以。不过两者的变量确实好象不能互相访问 这个问题我以前也遇到过,说说自己的一些理解,望指正1。在server端,页面要经过多重扫描,依次交给各个脚本引擎处理。 一般javascript要早于vbscript.为简单假设你只用vbscript.2。server端存在两种形式的脚本:<script runat=server..>与<%...%> 它们不能彼此嵌套使用,也不能自我嵌套。3。对于这两种server脚本,server是分两遍处理的。首先处理<%..%>. 见到非函数语句马上执行,执行结果放到页面中合适的地方。 见到函数则存为对象,等待调用。 如果非函数语句中有调用函数的。函数用什么形式和语言写的,就交割给什么引擎 处理,然后返回给原来的引擎。 <%...%>处理完毕后,才开始处理<script runat=server...>,处理过程同上。4。所以,在<script runat=server...>是可以引用<%..%>中定义的变量的。请看下列代码:<html><script runat=server language=vbscript>dim s1s1="ss1"</script><%dim s3s3="ss3"response.write "<br>ppp=="&s1%><script runat=server language=vbscript>dim s2s2=s1response.write "<br>heheh=="response.write s3</script><%s3="ss333"%></html> 执行结果为:ppp== heheh==ss3335。但<script runat=server...>有一个与<%..%>很大的不同之处(也是他们不多的不同之处中主要的一个):它生成的代码将放到页面外:<html>之前(jscript这么做)或</html>之后(vbscript的做法) 因此,最好不要在<script runat=server..>中使用非函数语句。否则你生成的叶面可能因为格式非法二被浏览器拒绝。(当然ie不会这样) 一般也是不使用<script runat=server..>的。除非你使用的脚本中没有你要的函数,而另一个脚本语言中正好有。敲完了。 呵呵 高兴啊 终于找到一个在这方面有兴趣的人了wanghu你所说的基本和我这几天想的差不多,我也有一个类似的测试页面,有兴趣可以看看<html><%dim aspasp = "asp1"response.write "<br>asp read java = "&aspresponse.write "<br>asp read java = "&javaresponse.write "<br>asp read vb = "&vb%><script runat=server language=javascript>var javajava ="java1"response.write("java read java = "+java)response.write("<br>java read asp = "+asp)response.write("<br>java read vb = "+asp)</script><script runat=server language=vbscript>dim vbvb = "vb1"response.write("<br>vb read vb = "&vb)response.write("<br>vb read asp = "&asp)response.write("<br>vb read java = "&java)</script></html>这个是会报错的,把下面这个加进来看看<html><%dim aspasp = "asp1"response.write "<br>asp read java = "&aspresponse.write "<br>asp read java = "&javaresponse.write "<br>asp read vb = "&vb%><script runat=server language=javascript>var javajava ="java1"response.write("java read java = "+java)response.write("<br>java read asp = ")response.write("<br>java read vb = ")</script><script runat=server language=vbscript>dim vbvb = "vb1"response.write("<br>vb read vb = "&vb)response.write("<br>vb read asp = "&asp)response.write("<br>vb read java = "&java)</script></html>看到结果了把,如果不出意料应该是java read java = java1java read asp = java read vb = asp read java = asp1asp read java = java1asp read vb = vb read vb = vb1vb read asp = asp1vb read java = java1结果表明有三种情况是访问不到变量的,有两种情况是在javascript中无法访问到<%%>和vbscript中的变量,还有一种比较奇怪<%%>无法访问到vbscript中的变量。总结起来就是vbscript可以访问其他两种情况下的变量但是自己的变量别人访问不到;javascript中的变量其他两种环境都可以访问但是却无法访问到别人的变量;<%%>就被他们夹在了中间可以访问javascript而不能访问vbscript,变量可以被vbscript访问却不能被javascript访问这就有点意思了。至于为什么第一个脚本不能被执行,那是因为javascript的语法比vbscript严格,不允许有未经定义的变量出现,而vbscript却不管那么多简单的把未经定义的变量看为空值。现在的问题就是为什么变量有的可以访问有的不可以访问。我们把显示后的源文件打开就可以看到下面的东西。java read java = java1<br>java read asp = <br>java read vb = <html><br>asp read java = asp1<br>asp read java = java1<br>asp read vb = </html> <br>vb read vb = vb1<br>vb read asp = asp1<br>vb read java = java1有意思把,和wanghu说的一样,javascript它生成的代码将放到页面外:<html>之前vbscript生成的代码将放到页面外:</html>之后,而<%%>是放在中间的,从这里我们似乎可以推测出在server端应该是按javascript—>asp —>vbscript的循序来执行程序的那我们就按编程的习惯把这个页面演化成这样的形式好了:var javajava ="java1"response.write("java read java = "+java)response.write("<br>java read asp = ")response.write("<br>java read vb = ")dim aspasp = "asp1"response.write "<br>asp read java = "&aspresponse.write "<br>asp read java = "&javaresponse.write "<br>asp read vb = "&vbdim vbvb = "vb1"response.write("<br>vb read vb = "&vb)response.write("<br>vb read asp = "&asp)response.write("<br>vb read java = "&java)哈,是不是很明显了?呵呵,结果合乎逻辑。不过我想为什么没有技术能把这样的变量统一调用到前端呢,应该可以先作个预处理把变量定义全部放在页面的最前方,这样变量的访问就要简单多了。实现应该不是很复杂,不过可能已经有了如果你见过这样的技术请告诉我。 不错,很清楚。不过你说server端按javascript—>asp —>vbscript的循序来执行程序的。这个并不对。asp本身不是一种脚本,不能和javascript,vbscript并列。次序应该这样排才合适:(只考虑有jscript和vbscript两种脚本)jscript之<%...%>--><script runat=server language=jscript>-->vbscript之<%...%>-->--><script runat=server language=vbscript>当然,在同一个页面中只能用一种脚本语言来撰写<%...%>你可以试验下面的页面,<%@ language=javascript%><html><script runat=server language=javascript>var s1;s1="ss1";</script><%//dim s3//s3="ss3"response.write("<br>ppp=="+s1);%> 网站播放歌曲问题 用JavaScript动态地修改一个input值时的onchange问题 javascript获得浏览器空白区域的高度? js问题 看代码 动态网页执行后可否保存为静态网页 如何使用javascript判断某 textbox 此时有 cursor 在还是没有﹖ 现在VBSCRIPT的程序员提供了这样一段脚本。但是没见有JS的版本,很是郁闷。是不是没有人做过。100分献给做出来的高手. 读 txt 文件, 这样写有什么错误,帮忙改一下. 动态读取表单元素的内容...... 多项选择,急! 提交form时,出现“拒绝访问“,是怎么回事?
而且好象也不能在<script runat=server>标记中用<%=xxx%>方式赋值
有谁理解的比较深,能从服务端的行为模式来解释一下它们的异同呢?
可以加分,多少都可以。不过两者的变量确实好象不能互相访问
1。在server端,页面要经过多重扫描,依次交给各个脚本引擎处理。
一般javascript要早于vbscript.为简单假设你只用vbscript.2。server端存在两种形式的脚本:<script runat=server..>与<%...%>
它们不能彼此嵌套使用,也不能自我嵌套。3。对于这两种server脚本,server是分两遍处理的。首先处理<%..%>.
见到非函数语句马上执行,执行结果放到页面中合适的地方。
见到函数则存为对象,等待调用。
如果非函数语句中有调用函数的。函数用什么形式和语言写的,就交割给什么引擎
处理,然后返回给原来的引擎。
<%...%>处理完毕后,才开始处理<script runat=server...>,处理过程同上。
4。所以,在<script runat=server...>是可以引用<%..%>中定义的变量的。请看下列代码:
<html>
<script runat=server language=vbscript>
dim s1
s1="ss1"
</script>
<%
dim s3
s3="ss3"
response.write "<br>ppp=="&s1
%>
<script runat=server language=vbscript>
dim s2
s2=s1
response.write "<br>heheh=="
response.write s3
</script>
<%s3="ss333"%>
</html>
执行结果为:
ppp==
heheh==ss3335。但<script runat=server...>有一个与<%..%>很大的不同之处(也是他们不多的不同之处中主要的一个):它生成的代码将放到页面外:<html>之前(jscript这么做)或</html>之后(vbscript的做法)
因此,最好不要在<script runat=server..>中使用非函数语句。否则你生成的叶面可能因为格式非法二被浏览器拒绝。(当然ie不会这样)
一般也是不使用<script runat=server..>的。除非你使用的脚本中没有你要的函数,而另一个脚本语言中正好有。敲完了。
wanghu你所说的基本和我这几天想的差不多,我也有一个类似的测试页面,有兴趣可以看看<html><%
dim asp
asp = "asp1"
response.write "<br>asp read java = "&asp
response.write "<br>asp read java = "&java
response.write "<br>asp read vb = "&vb
%><script runat=server language=javascript>
var java
java ="java1"
response.write("java read java = "+java)
response.write("<br>java read asp = "+asp)
response.write("<br>java read vb = "+asp)
</script><script runat=server language=vbscript>
dim vb
vb = "vb1"
response.write("<br>vb read vb = "&vb)
response.write("<br>vb read asp = "&asp)
response.write("<br>vb read java = "&java)
</script></html>这个是会报错的,把下面这个加进来看看
<html><%
dim asp
asp = "asp1"
response.write "<br>asp read java = "&asp
response.write "<br>asp read java = "&java
response.write "<br>asp read vb = "&vb
%><script runat=server language=javascript>
var java
java ="java1"
response.write("java read java = "+java)
response.write("<br>java read asp = ")
response.write("<br>java read vb = ")
</script><script runat=server language=vbscript>
dim vb
vb = "vb1"
response.write("<br>vb read vb = "&vb)
response.write("<br>vb read asp = "&asp)
response.write("<br>vb read java = "&java)
</script></html>看到结果了把,如果不出意料应该是java read java = java1
java read asp =
java read vb =
asp read java = asp1
asp read java = java1
asp read vb =
vb read vb = vb1
vb read asp = asp1
vb read java = java1结果表明有三种情况是访问不到变量的,有两种情况是在javascript中无法访问到<%%>和
vbscript中的变量,还有一种比较奇怪<%%>无法访问到vbscript中的变量。总结起来就是vbscript可以访问其他两种情况下的变量但是自己的变量别人访问不到;javascript中的
变量其他两种环境都可以访问但是却无法访问到别人的变量;<%%>就被他们夹在了中间可以
访问javascript而不能访问vbscript,变量可以被vbscript访问却不能被javascript访问
这就有点意思了。至于为什么第一个脚本不能被执行,那是因为javascript的语法比vbscript
严格,不允许有未经定义的变量出现,而vbscript却不管那么多简单的把未经定义的变量看
为空值。现在的问题就是为什么变量有的可以访问有的不可以访问。我们把显示后的源文件打开
就可以看到下面的东西。
java read java = java1<br>java read asp = <br>java read vb = <html><br>asp read java = asp1<br>asp read java = java1<br>asp read vb = </html>
<br>vb read vb = vb1<br>vb read asp = asp1<br>vb read java = java1有意思把,和wanghu说的一样,javascript它生成的代码将放到页面外:<html>之前
vbscript生成的代码将放到页面外:</html>之后,而<%%>是放在中间的,从这里我们似乎
可以推测出在server端应该是按javascript—>asp —>vbscript的循序来执行程序的那
我们就按编程的习惯把这个页面演化成这样的形式好了:
var java
java ="java1"
response.write("java read java = "+java)
response.write("<br>java read asp = ")
response.write("<br>java read vb = ")dim asp
asp = "asp1"
response.write "<br>asp read java = "&asp
response.write "<br>asp read java = "&java
response.write "<br>asp read vb = "&vbdim vb
vb = "vb1"
response.write("<br>vb read vb = "&vb)
response.write("<br>vb read asp = "&asp)
response.write("<br>vb read java = "&java)哈,是不是很明显了?呵呵,结果合乎逻辑。不过我想为什么没有技术能把这样的变量统一调用到前端呢,应该可以先作个预处理把变量定义
全部放在页面的最前方,这样变量的访问就要简单多了。实现应该不是很复杂,不过可能已经有了
如果你见过这样的技术请告诉我。
不过你说server端按javascript—>asp —>vbscript的循序来执行程序的。这个并不对。
asp本身不是一种脚本,不能和javascript,vbscript并列。次序应该这样排才合适:(只考虑有jscript和vbscript两种脚本)
jscript之<%...%>--><script runat=server language=jscript>-->vbscript之<%...%>-->--><script runat=server language=vbscript>
当然,在同一个页面中只能用一种脚本语言来撰写<%...%>
你可以试验下面的页面,
<%@ language=javascript%>
<html><script runat=server language=javascript>
var s1;
s1="ss1";
</script>
<%
//dim s3
//s3="ss3"
response.write("<br>ppp=="+s1);
%>