2016-05-03 58 views
-2

我需要在经典ASP中将服务器变量的值传递给Javascript。我写了下面的代码在我的ASP文件经典ASP打印变量名称而不是值

<% 
str = "<chart caption=\"Monthly revenue for last year\" subcaption=\"Harry&#39;s SuperMart\" xaxisname=\"Month\" yaxisname=\"Revenues (In USD)\" numberprefix=\"$\" theme=\"fint\"> <set label=\"Jan\" value=\"420000\" /> <set label=\"Feb\" value=\"810000\" /> <set label=\"Mar\" value=\"720000\" /> <set label=\"Apr\" value=\"550000\" /> <set label=\"May\" value=\"910000\" /> <set label=\"Jun\" value=\"510000\" /> <set label=\"Jul\" value=\"680000\" /> <set label=\"Aug\" value=\"620000\" /> <set label=\"Sep\" value=\"610000\" /> <set label=\"Oct\" value=\"490000\" /> <set label=\"Nov\" value=\"900000\" /> <set label=\"Dec\" value=\"730000\" /></chart>" 

%> 
<script type="text/javascript">alert("<%=str%>")</script> 

现在的问题是它始终显示为“<%= STR%>”,而不是STR

+0

你是不是缺少一个暗淡或无效的声明str var? – Avner

+1

这可能是一个愚蠢的问题,但你实际上是通过IIS查看你的asp文件,而不是在浏览器本地打开它? – John

+1

此外,您已将此标记为VBScript,因此推测VBScript是您的服务器端语言。避免VBS中双引号的方法是将它们输入两次而不是使用反斜杠 - 例如'<% str =“ John

回答

0

我使用单引号的值警报,没有问题。因此,尝试

<script type="text/javascript">alert('<%=str%>')</script> 
+0

单引号,双引号都应该像客户端一样工作,并保持“原样”,并且都是JavaScript中接受的字符串容器字符。 '<%=str%>'在服务器端被处理之后才会返回给客户端。很可能ASP预处理器不会处理这个页面,只是将文本'<%=str%>'作为文本而不是预处理它。 – Lankymart

+0

@Lankymart,虽然你是正确的,在警报上使用单引号或双引号都可以工作,因为OP向警报注入ASP字符串变量,而不是引用字符串的变量,ASP字符串变量中的双引号冲突用JavaScript开始/结束引号。 –

+0

@GaryRichter对不起,但你的错,如果它与客户端有任何关系,OP不会看到'<%=str%>'。实际上就正确形成的字符串而言'str'的​​构造不正确,如果ASP正在处理它,则会出现语法错误*(因为VBScript字符串中的'“'需要加倍才能正确转义,无论任何JavaScript转义会影响客户端)*。 – Lankymart

0

第一,ASP不使用斜线允许引号字符的使用,它采用两个双引号。因此,所有“\”的实例应该改为“”来创建一个双引号字符。其次,如果你正在做一个以双引号开头的JavaScript警报,那么双引号内的值也不能包含它们(因为它们基本上阻止了字符串被警告,这不是预期的效果)在上面的代码示例中,它看起来像是在提醒<%= str%>,但是如果您执行查看源代码,则会看到实际上发出警报该海峡的“价值”它创建这个JavaScript烂摊子:

<script type="text/javascript">alert("<chart caption="Monthly revenue for last year" subcaption="Harry&#39;s SuperMart" xaxisname="Month" yaxisname="Revenues (In USD)" numberprefix="$" theme="fint"> <set label="Jan" value="420000" /> <set label="Feb" value="810000" /> <set label="Mar" value="720000" /> <set label="Apr" value="550000" /> <set label="May" value="910000" /> <set label="Jun" value="510000" /> <set label="Jul" value="680000" /> <set label="Aug" value="620000" /> <set label="Sep" value="610000" /> <set label="Oct" value="490000" /> <set label="Nov" value="900000" /> <set label="Dec" value="730000" /></chart>");</script> 

所以我不知道你为什么会想提醒怪异的字符串,但如果你开始/结束与单引号的警报,你不会与你的ASP变量的双引号有冲突,你至少会得到警报。

我测试了上述的变化,它惊动得很好

+0

如果ASP字符串正确形成,你就不会有任何冲突。即'str =“<图表说明= \“”每月收入... \“”...>“'*('...'表示其他属性等的假定代码)*。 – Lankymart

+0

传统ASP可以使用JScript编写,它是JavaScript 。问题中的语法和格式只是fi嗯,问题是,OP没有正确使用IIS。 –

+0

@ShadowWizard它可以,但我怀疑他们正在使用JScript,语句不是以';'结尾*(它也被标记为[tag:vbscript],但这永远不会定论)*。我仍然认为这个问题归结为ASP处理程序永远不会执行,可能是因为没有在IIS中设置。还认为他们故意在字符串中使用'\“',因为他们期望字符串显示在JavaScript客户端,事情是为了工作,他们缺少'''''在ASP中先转义它们,这样只是'\“'将被发送到客户端。 – Lankymart