【问题标题】:Javascript eval causes Syntax error on IISJavascript eval 导致 IIS 上的语法错误
【发布时间】:2011-12-14 02:50:13
【问题描述】:


我正在尝试在服务器端使用 javascript 代码将 JSON 输入解析为对象。因为在经典 asp 中没有原生支持 JSON 反序列化,所以我尝试使用 Douglas Crockford 的 javascript 库 https://github.com/douglascrockford/JSON-js/blob/master/json2.js 作为服务器端代码。

我在 IIS Express 上使用了这个解决方案没有问题,但是当我在常规 IIS 上移动我的代码时,我遇到了这个错误:

Microsoft JScript compilation error '800a03ea'

Syntax error

而这条线是罪魁祸首j = eval('(' + text + ')');

所以我开始用类似的东西来愚弄它:

text = '(' + text + ')';
j = eval(text);

但与 eval 一致总是会导致错误。在没有成功后,我尝试简化代码以消除任何可能的干扰,并得出这个仍然会导致错误的简单代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>test</title>
        <script type="text/jscript" language="jscript" runat="server">
            function Test(text) {
                eval('(' + text + ')');
            }
        </script>
    </head>
    <body>
        <p><% Test("Test") %></p>
    </body>
</html>

我的问题是,有没有人知道是什么导致常规 IIS 不喜欢这种使用 eval?

【问题讨论】:

  • eval 是邪恶的。尽量少用。
  • @bitsMix,一般来说是的,但这里是 Dough 为清理 eval 表达式所做的源代码:首先我们将 JSON 反斜杠对替换为“@”(非 JSON特点)。其次,我们用 ']' 字符替换所有简单的值标记。第三,我们删除冒号或逗号后面或文本开头的所有开括号。最后,我们看看剩下的字符只是空格或']'或','或':'或'{'或'}'。如果是这样,那么文本对于 eval 是安全的。
  • @stivlo - 当您查看最后一个代码时,您会发现使用特定输入很简单(但有问题)。完整的代码已收到有效的 JSON,正如我所说,它可以在 IIS Express 上运行。
  • text的内容是什么?为什么要加括号?结果根本不是有效的格式。
  • @ShadowWizard:括号来自json2.js中的原始代码。源评论说:'{'(这是一个花括号)操作符在 JavaScript 中存在语法歧义:它可以开始一个块或一个对象字面量。我们将文本用括号括起来以消除歧义。

标签: asp-classic eval serverside-javascript


【解决方案1】:

不知道text 的值,但您尝试评估的最终字符串格式无效。可能是因为你添加了括号。

无论如何,为了让您的测试工作首先将函数更改为:

function Test(text) {
    return eval(text);
}

然后将可以评估的东西传递给它:

<p><%= Test("1+1") %></p>

对我来说工作得很好。

【讨论】:

  • 起初我也尝试评估“1 + 1”文本。完美地工作。问题是那些括号。这会产生语法错误:
  • 不,不是。这是您的实际数据。我已将测试用例更改为&lt;%= Test("({ 'first': 'value' })['first']") %&gt;,它工作正常,打印“值” - 就像我问的那样,发布你的text 的全部内容,我们会看看为什么它不是有效的 JSON。
猜你喜欢
  • 2011-06-22
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 2013-07-25
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多