С Chrome: Uncaught SyntaxError: Неожиданный токен < - PullRequest
2 голосов
/ 02 января 2012

Я получаю эту ошибку Uncaught SyntaxError: Неожиданный токен <</strong> от chrome, но все работает нормально с FireFox.Я нашел много похожих постов, но не нашел решения.

Так что мне интересно, есть ли способ отправить в браузер вторую страницу после ее сборки с собственным заголовком.Идея пришла, когда я увидел, что Firefox помещает то, что я повторяю в функции ниже, после закрывающего тега html , а Chrome помещает его перед закрывающим тегом.

В принципе, мне нравитсядля отправки в следующем порядке:

header('Content-Type: text/html; charset= utf-8');
<html></html>

header('Content-Type: text/javascript; charset= utf-8'); 
<script></script>

Это мой php-скрипт, я хотел бы раскомментировать код заголовка и отправить его независимо от HTML-страницы.

public static function jsShow($html)
{
    //header('Content-Type: text/javascript; charset= utf-8');
    echo "
        <script type=\"text/javascript\">
        var e = document.getElementById('message');
        e.innerHTML = $html ;
        e.style.display = 'block';
        </script>";
}

Вот так выглядит страница в Firefox, и это работает:

</body>
</html>

<script type="text/javascript">
var e = document.getElementById('message');
e.innerHTML = <ul style="list-style: none; margin: 0; padding: 0;">
<li style="background-color: #0000FF; margin: 0;"><img src="/asset/icon/info.gif" alt="Info: " /> working</li>
<li style="background-color: #008000; margin: 0;"><img src="/asset/icon/success.gif" alt="Success: " /> Got it</li>
</ul>
 ;
e.style.display = 'block';

</script>

Я подумал, что могу использовать ob_start () & ob_end_flush (), но вы можетене управляйте заголовками с этим единственным содержимым.

Ответы [ 2 ]

3 голосов
/ 02 января 2012

...

        e.innerHTML = " . json_encode($html) . " ;
2 голосов
/ 02 января 2012

Ошибка «Uncaught SyntaxError: Unexpected token <» является подходящей ошибкой для того, что вы показываете в своем втором блоке кода, потому что это недопустимый JavaScript и должен произойти сбой во всех браузерах. Вы присваиваете <code>e.innerHTML равную строке без кавычек:

e.innerHTML = <ul style="list-style: none; margin: 0; padding: 0;">
<li style="background-color: #0000FF; margin: 0;"><img src="/asset/icon/info.gif" alt="Info: " /> working</li>
<li style="background-color: #008000; margin: 0;"><img src="/asset/icon/success.gif" alt="Success: " /> Got it</li>
</ul>
 ;

Видите "<" сразу после "="? - это неожиданный знак. </p>

Похоже, вы не используете одинарные кавычки в этой строке, поэтому самое простое решение - просто заключить его в одинарные кавычки. Я не знаю PHP, но что-то вроде этого:

echo "
    <script type=\"text/javascript\">
    var e = document.getElementById('message');
    e.innerHTML = '" . $html . "';
    e.style.display = 'block';
    </script>";

Или каков бы ни был синтаксис PHP, чтобы вернуть этот результат в браузер:

e.innerHTML = '<ul style="list-style ...   </ul>';

Кстати, нет смысла устанавливать два разных заголовка для одного и того же ответа. То, что вы возвращаете, - это одна страница в формате html, в которой внизу находится блок скрипта. Тип содержимого "text / javascript" больше подходит для связанных файлов JS, которые не содержат html (без тегов сценария), а только JS.

...