JavaScript方法因无效令牌无法执行,调用时无alert提示,传json_encode值遇问题
你遇到的「无效或意外令牌」错误,核心原因是PHP输出的JSON格式不合法——你现在输出的是两个独立的JSON对象直接拼接在一起:
{"id":2,"title":"Announcement 1","content":"Announcement 1 Content","dateAdded":"2018-04-24 14:44:27"} {"id":1,"title":"Test Announcement Title","content":"Test Announcement Content","dateAdded":"2018-04-22 16:12:06"}
这种写法在JavaScript里是完全不合法的语法,JS引擎无法识别连续的两个对象字面量,直接抛出语法错误,导致整个JS代码都无法执行,自然弹不出alert。
1. 修复PHP端的JSON编码
首先要确保json_encode()输出的是合法的JSON数组,而不是两个独立对象。你需要把要编码的内容放到一个PHP数组里再编码:
假设原来的$value是两个独立的公告对象,修改成:
// 把单个公告对象统一放到数组中 $announcementsArray = [ ["id"=>2,"title"=>"Announcement 1","content"=>"Announcement 1 Content","dateAdded"=>"2018-04-24 14:44:27"], ["id"=>1,"title"=>"Test Announcement Title","content"=>"Test Announcement Content","dateAdded"=>"2018-04-22 16:12:06"] ]; // 如果是从数据库查询的结果,确保用fetchAll()之类的方法返回数组格式即可
然后输出的时候:
<?php echo json_encode($announcementsArray); ?>
这样输出的内容就会是合法的JSON数组:
[{"id":2,"title":"Announcement 1","content":"Announcement 1 Content","dateAdded":"2018-04-24 14:44:27"},{"id":1,"title":"Test Announcement Title","content":"Test Announcement Content","dateAdded":"2018-04-22 16:12:06"}]
2. 正确在JS中接收数据
现在你可以安全地把这个JSON数组赋值给JS变量,然后传入你的方法:
// 获取目标div元素,替换成你的实际ID const container = document.getElementById('announcement-container'); // 直接接收PHP输出的合法JSON数组 const announcementData = <?php echo json_encode($announcementsArray); ?>; // 调用你的方法 yourAnnouncementMethod(container, announcementData);
3. 验证JS方法的基础正确性
如果还是有问题,可以先简化方法测试,确认核心逻辑能执行:
function yourAnnouncementMethod(container, data) { alert('方法已执行!公告数量:' + data.length); // 后续再添加你的DOM渲染逻辑 }
这样能快速排查是数据问题还是方法本身的语法错误。
- 可以把PHP输出的JSON内容复制到在线JSON校验工具里检查,确保格式合法;
- 如果公告内容里有特殊字符(比如引号、换行),
json_encode()会自动转义,不用担心破坏JS语法。
内容的提问来源于stack exchange,提问作者heisenberg

