首页 > 解决方案 > 从 PHP 响应发回的同步 Javascript 中的非法令牌,关于跨站点小部件开发

问题描述

我在测试主题网站上有一个小部件;以下。

<div id="widget"></div>
<script src="http://www.project.com/api/?api=bXOIo4ERTaZt-a5b71a1c" type="text/javascript"></script>
<script>
     
    initialise(); 
    
</script>

该小部件与项目网站通信没有任何障碍。除非,当我在项目网站中有 PHP 时;像这样。

function initialise() { 
    var container = 'widget'; 
    var ele = document.getElementById( container );
    
    var response = "<?php foreach( $this -> get( 'api:bestsellers' ) as $record ): ?><p><?php echo $record -> get( 'title' ); ?>, <?php echo $record -> get( 'format_price' ); ?></p><br><?php endforeach; ?>";

    ele.innerHTML = response;
}

这是项目网站上的PHP,由小部件调用。这很有效,除非我将 PHP 放在新行上(例如缩进等),但我在开发人员工具上遇到错误;像这样。

var response = "
<?php foreach( $this -> get( 'api:bestsellers' ) as $record ): ?><p><?php echo $record -> get( 'title' ); ?>, <?php echo $record -> get( 'format_price' ); ?></p><br><?php endforeach; ?>";

我得到这个:“未捕获的语法错误:无效或意外的令牌”

需要注意的一点是:1)我使用同步 Javascript 是有原因的,异步 Javascript/AJAX 不是一个选项,因为我需要在同一页面上使用多个小部件,2)我的专业领域是 PHP 而不是 Javascript,3)我已经尝试对非 UTF8 字符、换行符和制表符等以及响应中的不可见字符进行 (Javascript) 字符串替换。

有点迷失为什么我不能在 PHP 块上使用缩进,有什么建议可以将响应一次性返回到小部件,没有错误或故障?谢谢。

标签: javascriptphpwidget

解决方案


发生错误是因为变量response的字符串位于多行上。要使字符串多行,请使用反引号。尝试这个:

var response = `
<?php foreach( $this -> get( 'api:bestsellers' ) as $record ): ?><p><?php echo $record -> get( 'title' ); ?>, <?php echo $record -> get( 'format_price' ); ?></p><br><?php endforeach; ?>`;
// Did not give an error!


推荐阅读