Javascript eval вызывает синтаксическую ошибку на IIS - PullRequest
0 голосов
/ 24 октября 2011


Я пытаюсь использовать код JavaScript на стороне сервера для анализа ввода JSON в объект. Поскольку в классическом asp отсутствует встроенная поддержка десериализации JSON, я попытался использовать библиотеку 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 голосов
/ 25 октября 2011

Не знаю значение text, но последняя строка, которую вы пытаетесь оценить, имеет неверный формат. Может быть, из-за добавленных скобок.

В любом случае, чтобы ваш тест работал, сначала измените функцию на:

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

Затем передайте ему нечто, что можно оценить:

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

Хорошо сработало для меня.

...