使用Chrome:Uncaught SyntaxError:意外的令牌<

时间:2012-01-02 03:40:02

标签: php javascript google-chrome syntax-error

我收到此错误未捕获的SyntaxError:来自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()&amp; ob_end_flush(),但您无法控制仅包含该内容的标题。

2 个答案:

答案 0 :(得分:3)

...

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

答案 1 :(得分:2)

错误“Uncaught SyntaxError:Unexpected token&lt;”对于您在第二个代码块中显示的内容是一个适当的错误,因为它是无效的JavaScript并且应该在所有浏览器中失败。您将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>
 ;

参见“&lt;”在“=”之后? - 这是意外的令牌。

您似乎没有在该字符串中使用任何单引号,因此最简单的修复只是将其包装在单引号中。我不懂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。