Javascript eval导致IIS上出现语法错误

时间:2011-10-24 12:43:48

标签: asp-classic eval serverside-javascript


我试图在服务器端使用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?

1 个答案:

答案 0 :(得分:0)

不知道text的值,但您尝试评估的最终字符串格式不正确。也许是因为您添加的括号。

无论如何,要使您的测试工作首先将功能更改为:

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

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

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

对我来说很好。