【问题标题】:Classic ASP is printing variable name rather than value经典 ASP 正在打印变量名而不是值
【发布时间】:2016-05-03 10:12:57
【问题描述】:

我需要在经典 ASP 中将服务器变量的值传递给 Javascript。我在我的 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 值的警报

【问题讨论】:

  • 你是不是缺少一个 dim 或 var 来声明 str var?
  • 这可能是一个愚蠢的问题,但您实际上是通过 IIS 查看您的 asp 文件,而不是在浏览器中本地打开它吗?
  • 另外,您已将其标记为 VBScript,因此可能 VBScript 是您的服务器端语言。在 VBS 中转义双引号的方法是输入两次而不是使用反斜杠 - 例如 &lt;% str = "&lt;chart caption=""Monthly revenue for last year"" subcaption=""harrys supermart""
  • 这可能会有所帮助 - ASP Classic setup issues
  • 经典 ASP 必须通过 IIS 提供服务,正如其他人所说,您忽略了。它不会神奇地运行。

标签: web vbscript asp-classic


【解决方案1】:

我使用单引号,这没问题。所以试试

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

【讨论】:

  • 单引号,双引号都应该工作,因为它们是客户端并保持“原样”,并且都是 JavaScript 中接受的字符串容器字符。 &lt;%=str%&gt; 在返回给客户端之前在服务器端进行处理。很可能 ASP 预处理器从不处理此页面,只是将 &lt;%=str%&gt; 作为文本返回,而不是对其进行预处理。
  • @Lankymart 虽然您是正确的,在警报上使用单引号或双引号都可以工作,因为 OP 将 ASP 字符串变量注入警报,而不是引用字符串的变量,双引号在 ASP 字符串变量中与 javascript 开始/结束引号冲突。
  • @GaryRichter 抱歉,但你错了,如果它与客户端有关,OP 不会只看到 &lt;%=str%&gt;。事实上,就正确形成的字符串而言,str 构造不正确,如果 ASP 正在处理它,则会出现语法错误 (因为 VBScript 字符串中的" 需要加倍才能正确转义,不管任何会影响客户端的 JavaScript 转义).
  • @Lankymart 你可能是正确的,可能存在某种服务器/配置问题。我能够获取他的代码并查看他的“预期”结果为何失败并提供解决方案,但是,是的,如果他收到 的警报“值”,那么肯定有问题。
【解决方案2】:

首先,ASP 不使用斜线来允许使用引号字符,它使用两个双引号。所以 \" 的所有实例都应更改为 "" 以创建双引号字符。其次,如果您正在执行以双引号开头的 javascript 警报,则双引号内的值也不能包含它们(因为他们基本上停止了要警告的字符串,这不是预期的效果)。在上面的代码示例中,看起来你正在警告 但如果你做一个查看源代码,你会看到你实际上是在警告创建这个 JavaScript 混乱的 str 的“值”:

<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 变量的双引号发生冲突,你至少会得到提醒上班。

我测试了上述更改,它发出了警报

【讨论】:

  • 如果 ASP 字符串格式正确,则根本不会发生冲突。即str = "&lt;chart caption=\""Monthly revenue ... \"" ... &gt;" ... 表示其他属性等的假定代码).
  • 经典的 ASP 可以用 JScript 编写,它是 JavaScript 的一种变体。问题中的语法和格式很好,问题是,OP没有正确使用IIS。
  • @ShadowWizard 可以,但我怀疑他们使用的是 JScript,语句不会以 ; 终止一个 (它也标记为 vbscript,但这永远不会定论)。我仍然认为这个问题归结为 ASP 处理程序永远不会执行,可能是因为没有在 IIS 中设置。还认为他们故意在字符串中使用\",因为他们希望字符串显示在JavaScript客户端中,事情是为了使其工作,他们缺少\""首先在ASP中转义它们,这样只是@987654328 @ 将被发送给客户端。
  • @Lankymart 不。 ; 在 JS 中是可选的,一直都是。反斜杠完全没问题,它只是在字符串中包含文字引号的一种方式。然而,OP 忽略了所有的 cmets,因此我投了反对票——“问了就忘了”是我鄙视的东西。 (人们只是在问,希望把所有东西都放在银盘上,从不费心回复答案或 cmets。)
  • @ShadowWizard 真的吗?主要使用 VBScript,所以我从来不知道。也不喜欢问和忘记,现在似乎越来越多地出现在 vbscript 和 asp-classic 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2019-12-23
  • 2014-04-28
  • 1970-01-01
  • 2014-01-10
相关资源
最近更新 更多