You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:50:31