
在web开发中,我们经常需要将服务器端(如php)生成的内容直接嵌入到客户端javascript代码中。一种常见的场景是,php动态生成一段html或其他数据,然后将其赋值给javascript变量,以便在页面上进行渲染或进一步处理。例如,一个常见的同步嵌入方式如下:
<?php
// PHP生成一段HTML内容
$content = "<p>商品名称:商品A</p><br><p>价格:$100.00</p>";
?>
<script>
var response = "<?php echo $content; ?>";
document.getElementById('widget').innerHTML = response;
</script>当PHP变量$content包含换行符(例如,为了代码可读性或内容本身就包含多行HTML结构)时,如果JavaScript字符串使用传统的单引号'或双引号"定义,就会出现问题。例如,当$content实际输出为:
<p>商品名称:商品A</p> <br> <p>价格:$100.00</p>
JavaScript代码在浏览器解析时会变成:
var response = "<p>商品名称:商品A</p> <br> <p>价格:$100.00</p>";
此时,浏览器会抛出Uncaught SyntaxError: Invalid or unexpected token错误。这是因为在ECMAScript 5及之前的标准中,单引号或双引号定义的字符串字面量不允许包含未转义的换行符。换行符会被解析为非法的JavaScript令牌。
为了解决这个问题,我们可以利用ECMAScript 2015 (ES6) 引入的模板字面量(Template Literals)。模板字面量使用反引号 `` 来定义字符串,它天然支持多行字符串,并且允许在其中直接嵌入表达式。
立即学习“PHP免费学习笔记(深入)”;
将上述有问题的JavaScript代码修改为使用模板字面量,即可解决此语法错误:
<?php
// PHP生成一段HTML内容
// 假设 $this->get('api:bestsellers') 返回一个可迭代的商品列表
$html_output = '';
foreach( $this -> get( 'api:bestsellers' ) as $record ) {
$title = htmlspecialchars($record -> get( 'title' )); // 安全转义
$price = htmlspecialchars($record -> get( 'format_price' )); // 安全转义
$html_output .= "<p>{$title}, {$price}</p><br>";
}
?>
<div id="widget"></div>
<script>
function initialise() {
var container = 'widget';
var ele = document.getElementById( container );
// 使用模板字面量(反引号)来定义多行字符串
var response = `<?php echo $html_output; ?>`;
ele.innerHTML = response;
}
initialise();
</script>代码解释:
当在JavaScript中同步嵌入PHP生成的多行内容时,避免Uncaught SyntaxError: Invalid or unexpected token错误的关键在于使用JavaScript的模板字面量(反引号 ``)。这种ES6特性提供了一种简洁、直观的方式来定义多行字符串,从而确保PHP输出能够被JavaScript正确解析。同时,在进行这种数据嵌入时,务必关注数据的安全性,对PHP输出进行适当的转义,以防范潜在的XSS风险。
以上就是解决JavaScript中PHP多行输出导致的语法错误的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号