将对象数组通过隐藏输入框传递给jQuery时JSON解析报错问题
问题原因
你遇到的JSON解析错误,核心原因是JSON字符串中的双引号与HTML input标签的value属性引号冲突。当你直接把json_encode的结果放到value="..."中时,HTML会将JSON里的第一个双引号视为value属性的结束标记,导致实际传递给JS的内容被截断,变成不完整的JSON片段(比如只拿到[),自然无法解析。
解决方案
以下三种方法都能解决这个问题,按需选择:
方法1:HTML转义JSON字符串
使用PHP的htmlspecialchars函数对json_encode的结果进行转义,把双引号转成HTML实体",避免和value属性的引号冲突:
<input type="hidden" id="tag_filter_list" value="<?php echo htmlspecialchars(json_encode($tag_filter_list), ENT_QUOTES); ?>" />
ENT_QUOTES参数会同时转义单引号和双引号,进一步避免潜在的引号冲突问题。
方法2:用textarea替代hidden input
textarea的内容不会受外层引号影响,直接存放原始JSON即可:
<textarea id="tag_filter_list" style="display: none;"><?php echo json_encode($tag_filter_list); ?></textarea>
JS解析代码不变:
var tag_filter_list = JSON.parse($('#tag_filter_list').val());
方法3:直接输出为JS变量
跳过DOM存储环节,直接把JSON作为JS对象字面量输出到页面中,无需JSON.parse:
var tag_filter_list = <?php echo json_encode($tag_filter_list); ?>;
这种方式最简洁,也避免了DOM操作可能带来的问题。
内容的提问来源于stack exchange,提问作者xanabobana
相关产品推荐
相关产品推荐

