js 如何运行ASP语句所包含的js代码
例子:<%dimjsHtmljsHtml="mm_menu=newmenu(参数1,参数2,...);"%>我是这样用的:<script>functionfun1(){e...
例子:
<%
dim jsHtml
jsHtml = "mm_menu = new menu(参数1,参数2,...);"
%>
我是这样用的:
<script>
function fun1(){
eval('<%=jsHtml%>');
}
fun1();
</script>
注:
我开始用eval(调用ASP语句),但是没有用,而且还提示很多错误
后来我不用eval()了,错误时没有了,但是js函数却没有一点运行的效果,等于没有。
我想请问一下这个问题,麻烦大家解答一下好吗?
很急!
先谢谢了。。。 展开
<%
dim jsHtml
jsHtml = "mm_menu = new menu(参数1,参数2,...);"
%>
我是这样用的:
<script>
function fun1(){
eval('<%=jsHtml%>');
}
fun1();
</script>
注:
我开始用eval(调用ASP语句),但是没有用,而且还提示很多错误
后来我不用eval()了,错误时没有了,但是js函数却没有一点运行的效果,等于没有。
我想请问一下这个问题,麻烦大家解答一下好吗?
很急!
先谢谢了。。。 展开
2个回答
展开全部
ASP是非常自由的,以致于自由到很多人分不清服务端与客户端.
我先说一下原理,<%%>中的内容是服务端的,当请求发生时,服务端运行,将所有的<%%>运行后发送至客户端的.而JS却是在客户端发生的,你的语句不正确,就是有一点小小的原因.
你可以这样写:
<%
jshtml = .......
response.write "<script>"&vbcrlf
response.write jshtml
response.write "</script>"
%>
当这段在服务端运行扰察后变成了:
<script>
.........</script>
这段就会生成在客户端而供客户端直接运行.没有任何问题的.当然也可以写在函数的形式等等.
有人怕麻烦,采用了客服混写的方式:
<script>
<% response.write jshtml %>
</script>
这种写法当然也可以正常运行的.
<%=jshtml%>这样写错不错?也不错,因为是变量嘛它与response.write是没有多大的区别的.
但是我们有时间会想,毕竟写出来的是一个字符啊,能否执行?如果你问了这句话,证明你真的错了,别忘记了,<%%>是服务端的代码,在服务端看来,所有要发送到客户端的内容都算是文本流,当然都文本流了,也就意味着说所有发送到客户端的都是字符,发给浏览器后就行了.浏览器与服务器之间当然传递的都是封装过的字符.所以是可以正常执行的.
正这种原因,有人在网上一直找ASP如何向JS传递变量的,这就稿李虚是,但绝不能称变量传递.因为服务端是可以生成整个的JS代码的,难道仅仅是一种变量传递吗?问这样问题的人都是不清楚机理的.有点像传递不错,但谁解释成是变量传递的老师,也绝对只是误人子弟的.他们之间是没有变量的传递的.因为服务器可以生成客户端任何想要的东西的.
而使用eval这种方式的人可能是真的不懂机理,或者是炫耀自已对JS是多么的精通.因为这里根本就不需要用的.但用了也不会出错.所以应该还是正确的.而你却在使用eval中出错了一个小小的错误,而是eval的常识错误.
如果这样写:
照你的理解是:服务端先进行了一个<%=jsHTML%>的替换,然后加上’号发送到客户端,这样,客户端正好会去执行.
但还有一种理解,是不是eval('');本身就是客户的的代码,而不用替换?你想直接执行引号里边的内容?
很显然,这在解析上存在了歧义,关键是这个歧义让分析程序如何去分析?但大部分也是按按先从服务器进行分析的,所以你应该还是正确的.我之所以这样写,只是想告诉你,不要发生任何歧义的语句,以防出错而已.改一下也行的:
将jshtml=这句改一下:
jshtml = "'mm_menu = ......;'"
这样生成的语句中就本身带有’号了,所以eval时则不用了直接可以写成键燃:
eval(<%=jsthml%>);这就行了.
你的错误真正的在于:
eval('mm_menu = new mwnu(参数1,参数2,...);');你让他得到什么样的参数?原封不动的套进不就是这样样子,怎么执行?你在JS中写过这样的语句:
mm_menu = new menu(参数1,参数2,...);
这样的语句是不行正确执行的,这才是你真正的错误所在的!
我先说一下原理,<%%>中的内容是服务端的,当请求发生时,服务端运行,将所有的<%%>运行后发送至客户端的.而JS却是在客户端发生的,你的语句不正确,就是有一点小小的原因.
你可以这样写:
<%
jshtml = .......
response.write "<script>"&vbcrlf
response.write jshtml
response.write "</script>"
%>
当这段在服务端运行扰察后变成了:
<script>
.........</script>
这段就会生成在客户端而供客户端直接运行.没有任何问题的.当然也可以写在函数的形式等等.
有人怕麻烦,采用了客服混写的方式:
<script>
<% response.write jshtml %>
</script>
这种写法当然也可以正常运行的.
<%=jshtml%>这样写错不错?也不错,因为是变量嘛它与response.write是没有多大的区别的.
但是我们有时间会想,毕竟写出来的是一个字符啊,能否执行?如果你问了这句话,证明你真的错了,别忘记了,<%%>是服务端的代码,在服务端看来,所有要发送到客户端的内容都算是文本流,当然都文本流了,也就意味着说所有发送到客户端的都是字符,发给浏览器后就行了.浏览器与服务器之间当然传递的都是封装过的字符.所以是可以正常执行的.
正这种原因,有人在网上一直找ASP如何向JS传递变量的,这就稿李虚是,但绝不能称变量传递.因为服务端是可以生成整个的JS代码的,难道仅仅是一种变量传递吗?问这样问题的人都是不清楚机理的.有点像传递不错,但谁解释成是变量传递的老师,也绝对只是误人子弟的.他们之间是没有变量的传递的.因为服务器可以生成客户端任何想要的东西的.
而使用eval这种方式的人可能是真的不懂机理,或者是炫耀自已对JS是多么的精通.因为这里根本就不需要用的.但用了也不会出错.所以应该还是正确的.而你却在使用eval中出错了一个小小的错误,而是eval的常识错误.
如果这样写:
照你的理解是:服务端先进行了一个<%=jsHTML%>的替换,然后加上’号发送到客户端,这样,客户端正好会去执行.
但还有一种理解,是不是eval('');本身就是客户的的代码,而不用替换?你想直接执行引号里边的内容?
很显然,这在解析上存在了歧义,关键是这个歧义让分析程序如何去分析?但大部分也是按按先从服务器进行分析的,所以你应该还是正确的.我之所以这样写,只是想告诉你,不要发生任何歧义的语句,以防出错而已.改一下也行的:
将jshtml=这句改一下:
jshtml = "'mm_menu = ......;'"
这样生成的语句中就本身带有’号了,所以eval时则不用了直接可以写成键燃:
eval(<%=jsthml%>);这就行了.
你的错误真正的在于:
eval('mm_menu = new mwnu(参数1,参数2,...);');你让他得到什么样的参数?原封不动的套进不就是这样样子,怎么执行?你在JS中写过这样的语句:
mm_menu = new menu(参数1,参数2,...);
这样的语句是不行正确执行的,这才是你真正的错误所在的!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询