Ajax获取数据库单条记录:JSON.parse报错且属性访问返回undefined求助
问题分析与解决方案
1. JSON.parse报错的原因
你在Ajax配置里设置了dataType: 'json',这会让jQuery自动把服务器返回的JSON字符串解析成JavaScript对象。此时success回调里的data已经是一个JS对象(准确说是数组),再调用JSON.parse(data)必然报错——因为JSON.parse只能处理字符串,传入对象就会抛出Unexpected identifier "object"错误。
解决:直接删除JSON.parse(data);这一行
2. 访问data.lastname返回undefined的原因
你的PHP代码把查询结果放到了数组$dbdata中($dbdata[] = $row),所以json_encode后返回的是包含单个对象的数组:
[{"lastname":"Smalls","journal":"Nature Medicine","progress_notes":"2023-10-19 - Form notification received\r\n"}]
前端的data是数组类型,必须先取数组的第一个元素,再访问属性:
var name = data[0].lastname;
3. 优化PHP代码(可选)
既然你查询的是单条记录,没必要用while循环封装成数组,直接获取单条记录即可,这样返回的是单个对象而非数组,前端访问更直接:
$sql = "SELECT lastname, journal, progress_notes FROM myrecords WHERE id=" . $id; $result = $conn->query($sql); $dbdata = $result->fetch_assoc(); // 直接获取单条记录 header('Content-Type: application/json'); // 添加正确的响应头 echo json_encode($dbdata);
此时返回的JSON是:
{"lastname":"Smalls","journal":"Nature Medicine","progress_notes":"2023-10-19 - Form notification received\r\n"}
前端就可以直接用data.lastname访问属性了。
4. 关于响应头的补充
务必在PHP中添加header('Content-Type: application/json');,放在echo json_encode(...);之前,这能确保服务器返回的内容被正确识别为JSON类型,避免解析异常。你之前出现键名引号消失的问题,大概率是添加位置错误导致的。
内容的提问来源于stack exchange,提问作者jmatt
相关产品推荐
相关产品推荐

