【问题标题】:Classic ASP query string variable is both set and unset [closed]经典 ASP 查询字符串变量已设置和未设置 [关闭]
【发布时间】:2020-03-24 18:35:22
【问题描述】:

我有这个代码:

<%If CInt(Request.QueryString("OpenYouthHistory")) > 0 Then %>
<script>
    var yid = <% Request.QueryString("OpenYouthHistory") %>;
    window.open("YouthHistory.asp?YouthID=" + yid);
</script>
<% End If %>

如果设置了OpenYouthHistory 查询字符串变量,我想在弹出窗口中打开YouthHistory.asp 页面。但是,当我以 210 的值运行它时,我会得到以下输出:

<script>
    var yid = ;
    window.open("YouthHistory.asp?YouthID=" + yid);
</script>

这当然是无效的 JavaScript。但是为什么yid 变量没有得到值?如果查询字符串变量确实为空,为什么&lt;script&gt; 标记甚至呈现?我很困惑...

【问题讨论】:

标签: javascript vbscript asp-classic


【解决方案1】:

使用&lt;%=,这是&lt;% Response.Write的快捷方式

<%If CInt(Request.QueryString("OpenYouthHistory")) > 0 Then %>
<script>
    var yid = <%=Request.QueryString("OpenYouthHistory") %>;
    window.open("YouthHistory.asp?YouthID=" + yid);
</script>
<% End If %>

【讨论】:

  • 啊哈,谢谢!完全忘记了&lt;%=
  • 在处理注入的 ASP 变量时我要说的一件事是用引号将它们括起来,因此如果它们为空,则不会导致 JavaScript 中的语法错误。 var yid = "&lt;%=Request.QueryString("OpenYouthHistory") %&gt;"; 之类的东西,这样你就可以使用 JavaScript 检查 yid 的长度,看看它是否包含有效值,而不是 var yid = ; 导致语法错误。
  • 你的评论是有道理的,但是前面有&lt;%If CInt(,所以只有数值会进入注入的代码。
  • @alex 确实如此,我确实注意到了这一点,但是当 OP 专注于 &lt;%= 时,我想明确一点,在尝试注入它们之前确保值是有效的。答案是绝对正确的,不是批评。
  • 虽然我完全理解您的评论,但我们不应该混淆 OP 告诉语法错误,因为没有引号的值不一定是无效的 - javascript 规范不需要数字文字的引号,var yid = 1; 将是从任何角度来看都是绝对有效的。
猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多