【问题标题】:With Chrome: Uncaught SyntaxError: Unexpected token <使用 Chrome: Uncaught SyntaxError: Unexpected token <
【发布时间】:2012-01-31 14:29:44
【问题描述】:

我收到此错误 Uncaught SyntaxError: Uncaught SyntaxError: Unexpected token from 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(),但你不能控制只有内容的标题。

【问题讨论】:

    标签: php javascript google-chrome syntax-error


    【解决方案1】:

    错误“Uncaught SyntaxError: Unexpected token 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>
     ;
    

    看到“=”后面的“

    您似乎没有在该字符串中使用任何单引号,因此最简单的解决方法就是将其包裹在单引号中。我不知道 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。

    【讨论】:

    • 引用也是我的第一个想法。但是当我引用它时,它给了我一个不同的错误,并且它也停止在 Firefox 中工作。看到它认为我不应该引用,因为它全部从 php 变量转移到 js var。无论如何,这是我引用时得到的:
    • 你必须引用它,或者至少确保引用最终出现在浏览器看到的内容中(即,你通过查看源代码看到的内容)。您不能直接从 PHP 变量传输到 JS 变量,PHP 在服务器上运行并输出文本,然后作为浏览器接收的页面源的一部分。从您接受的解决方案中查看查看源代码...
    【解决方案2】:

    ...

            e.innerHTML = " . json_encode($html) . " ;
    

    【讨论】:

    • 我不认为这会起作用,我也不明白为什么会这样,我只是出于绝望而尝试了它,雅虎
    • 它利用了所有 JSON 值都是有效的 JavaScript 文字这一事实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2013-11-11
    • 2019-03-18
    • 2012-05-17
    • 2019-02-10
    • 2014-07-08
    相关资源
    最近更新 更多