如何在WordPress中将PHP多维数组传递给JavaScript?
解决PHP JSON数组传递到JS/JQuery的问题
我来帮你搞定这个JSON传递的问题!你当前的代码有两个关键错误,咱们一步步修正:
问题分析
你最后尝试的代码:
var multidate_array = JSON.parse('<?php $list_allDates; ?>');
存在两个核心问题:
- PHP未输出变量:
<?php $list_allDates; ?>只是引用了变量,但没有通过echo输出它的值,导致JS拿到的是空字符串,JSON.parse自然会报错。 - 字符串转义风险:即便加上
echo,直接把JSON放在单引号里,如果JSON内容包含单引号、换行符等特殊字符,会直接破坏JS的字符串语法,引发解析失败。
正确的解决方案
方法1:直接将JSON作为JS对象赋值(推荐)
json_encode生成的标准JSON本身就是合法的JS对象字面量(你的场景是日期字符串,完全兼容),所以不需要额外用JSON.parse,直接输出赋值即可:
<?php // 先确保数组和JSON转换逻辑正确 $listDates = [ ['start_date' => '00:00 12-04-2017', 'end_date' => '00:05 22-05-2018'], // 其他日期项... ]; $list_allDates = json_encode($listDates); ?> <script> var multidate_array = <?php echo $list_allDates; ?>; // 验证:在浏览器控制台查看数组 console.log(multidate_array); </script>
这种方式最简洁,也彻底避免了转义问题。
方法2:安全使用JSON.parse(特殊场景)
如果因为某些原因必须用JSON.parse,可以通过json_encode再次转义,把原始JSON字符串转换成符合JS语法的安全字符串:
var multidate_array = JSON.parse(<?php echo json_encode($list_allDates); ?>);
这里的json_encode($list_allDates)会把原始JSON转义成JS可识别的字符串格式,比如双引号、换行符都会被正确处理,不会出现语法错误。
额外排查步骤
- 查看页面源代码:确认PHP输出的内容是完整、合法的JSON格式,没有语法错误。
- 验证PHP的JSON转换:在PHP中用
var_dump($list_allDates)或者json_last_error()检查json_encode是否成功(如果数组包含非法UTF-8字符,json_encode会返回false)。 - 浏览器控制台调试:打开开发者工具的Console面板,查看是否有语法错误或解析报错,快速定位问题。
内容的提问来源于stack exchange,提问作者cafequijano
相关产品推荐
相关产品推荐

