<% %>定义的变量是服务器端的变量,而<SCRIPT>里的是客户端变量
客户端可以调用服务器端的,反之则不可以

解决方案 »

  1.   

    楼上的,看清楚<script runat=server>,是服务器端脚本。两者区别在于<%%>中客户端看不到代码,而<Script>中的客户端可以看到。两者的变量也不能互相访问,但script中变量可以用<%=xxx%>方式赋值。
      

  2.   

    好象<script runat=server>在客户端也是看不到的
    而且好象也不能在<script runat=server>标记中用<%=xxx%>方式赋值
    有谁理解的比较深,能从服务端的行为模式来解释一下它们的异同呢?
    可以加分,多少都可以。不过两者的变量确实好象不能互相访问
      

  3.   

    这个问题我以前也遇到过,说说自己的一些理解,望指正
    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..>的。除非你使用的脚本中没有你要的函数,而另一个脚本语言中正好有。敲完了。
       
      

  4.   

    呵呵 高兴啊 终于找到一个在这方面有兴趣的人了
    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)哈,是不是很明显了?呵呵,结果合乎逻辑。不过我想为什么没有技术能把这样的变量统一调用到前端呢,应该可以先作个预处理把变量定义
    全部放在页面的最前方,这样变量的访问就要简单多了。实现应该不是很复杂,不过可能已经有了
    如果你见过这样的技术请告诉我。
      
      

  5.   

    不错,很清楚。
    不过你说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);
    %>