我在测试主题网站上有一个小部件;在下面
<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; ?>";
我明白了:";未捕获的SyntaxError:无效或意外的令牌";
需要注意的是:1(我使用同步Javascript是有原因的,异步Javascript/AAJAX不是一个选项,因为我需要在同一页面上有多个小部件,2(我的专业领域是PHP而不是Javascript,3(我尝试过(Javascript(字符串替换非UTF8字符、换行符和制表符等以及响应中的不可见字符。
有点不明白为什么我不能在PHP块上使用缩进,有什么建议可以让响应完整地返回到小部件,没有错误或错误?谢谢
发生错误的原因是变量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!