PHP传递JSON数组至JS后无法访问深层字段问题求助
问题描述
你遇到的情况是:从PHP传递到JavaScript的survey_data中,只能访问顶层的键值对,但尝试访问深层字段(比如survey_data[survey_name]['title'])时返回undefined。通过console.log可以看到,survey_data[survey_name]是一个JSON格式的字符串,而不是可直接访问的JavaScript对象——但如果直接在JS里定义同样结构的对象,却能正常获取title字段。
原因分析
问题出在你的PHP代码处理逻辑上:
你原本是把base64解码后的JSON字符串直接存入了$survey_data数组,当执行json_encode($survey_data)时,这个JSON字符串会被当作普通字符串处理,最终在JS中得到的是一个包含嵌套JSON字符串的对象,而非嵌套的JSON对象。
举个直观的例子,原PHP处理后,json_encode生成的内容类似:
{ "test": "{\"title\":\"test\",\"data\":{...}}", "The New Survey": "{\"title\":\"The New Survey\",\"data\":{...}}" }
到了JS里,survey_data['test']就是一个字符串,你自然无法通过.或[]直接访问它的title属性。
修复方案
解决思路很简单:在PHP中,先把base64解码后的JSON字符串解析成PHP数组/对象,再存入$survey_data,这样json_encode时就能把它转换成嵌套的JSON对象,JS端就能直接访问深层字段了。
原错误PHP代码:
$survey_data = []; foreach ($surveys as $survey) { $survey_fi = $survey['survey_fields']; $survey_data[ $survey_f['title']] = imap_base64($survey_fi); }
修复后的PHP代码:
$survey_data = []; foreach ($surveys as $survey) { $survey_fi = $survey['survey_fields']; // 先把base64解码后的JSON字符串解析为PHP关联数组 $survey_f = json_decode(imap_base64($survey_fi), true); $survey_data[ $survey_f['title']] = $survey_f; }
修复后,你的JavaScript代码不需要做任何修改,survey_data[survey_name]会变成一个可直接访问的对象,survey_data[survey_name]['title']就能正常返回对应的值了。
内容的提问来源于stack exchange,提问作者Top-Bot

