javascript - 从 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 块上使用缩进,有什么建议可以将响应一次性返回到小部件,没有错误或故障?谢谢。
解决方案
发生错误是因为变量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!
推荐阅读
- entity-framework-6 - Entity Framework 6, Repository Pattern, Unit of Work, Save and get last ID 然后更新记录
- javascript - 如何应用锚链接,以便在滚动时在顶部留下一些空间?
- java - Spring JPA 用其他表引用一个表
- node.js - 如何将变量流式传输到文件 Node JS?
- symfony - symfony 控制台命令 113 退出代码
- django - 在删除对象模型之前添加规则的问题
- x86 - OPOS 库 v1.14 在 x64 版本的 .net 中无法正常工作
- python-3.x - 图像大小 - Python
- android - Kivy Android App - 滑动切换屏幕
- cpanel - 我们如何解决 centos 和 cpanel 的 php cli 问题?