AJAX返回空数组排查:PHP项目数据库数据无法展示问题
问题分析与解决方案
核心问题
- PHP端无法正确序列化数据库结果集:
getData.php中查询返回的是mysqli_result对象,直接传入json_encode会导致序列化失败,返回空数组/对象。 - 前端未正确解析JSON响应:AJAX成功回调中没有解析JSON字符串,直接使用原始响应文本。
- DOM元素创建语法错误:使用了HTML转义字符
<而非实际的标签<,导致无法创建表格行。 - 前后端数据键名不匹配:前端代码中引用了
appointmentsData等不存在的键,与后端返回的键名不一致。
修复步骤
1. 修复PHP数据查询与序列化(getData.php)
将数据库结果集转换为可序列化的关联数组,并调整返回的键名以匹配前端期望:
<?php ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); error_reporting(E_ALL); session_start(); include "config.php"; $selected_date = $_POST['selected_date']; $user_id = $_SESSION['user_id']; // 获取预约数据的函数 function getAppointments($user_id, $selected_date) { global $conn; $stmt = $conn->prepare("SELECT * FROM appointments WHERE user_id = ? AND appointment_date = ?"); // user_id是整数类型,用"i",日期是字符串用"s" $stmt->bind_param("is", $user_id, $selected_date); $stmt->execute(); if ($stmt->error) { die("Query failed: " . $stmt->error); } $result = $stmt->get_result(); // 将结果集转换为关联数组 return $result->fetch_all(MYSQLI_ASSOC); } // 获取先兆症状数据的函数 function getAuras($user_id, $selected_date) { global $conn; $stmt = $conn->prepare("SELECT * FROM auras WHERE user_id = ? AND aura_date = ?"); $stmt->bind_param("is", $user_id, $selected_date); $stmt->execute(); $result = $stmt->get_result(); return $result->fetch_all(MYSQLI_ASSOC); } // 获取用药数据的函数 function getMedications($user_id, $selected_date) { global $conn; $stmt = $conn->prepare("SELECT * FROM medications WHERE user_id = ? AND date_taken = ?"); $stmt->bind_param("is", $user_id, $selected_date); $stmt->execute(); $result = $stmt->get_result(); return $result->fetch_all(MYSQLI_ASSOC); } // 获取情绪数据的函数 function getMood($user_id, $selected_date) { global $conn; $stmt = $conn->prepare("SELECT * FROM mood WHERE user_id = ? AND mood_date = ?"); $stmt->bind_param("is", $user_id, $selected_date); $stmt->execute(); $result = $stmt->get_result(); return $result->fetch_all(MYSQLI_ASSOC); } // 获取癫痫发作数据的函数 function getSeizures($user_id, $selected_date) { global $conn; $stmt = $conn->prepare("SELECT * FROM seizures WHERE user_id = ? AND seizure_date = ?"); $stmt->bind_param("is", $user_id, $selected_date); $stmt->execute(); $result = $stmt->get_result(); return $result->fetch_all(MYSQLI_ASSOC); } $appointments = getAppointments($user_id, $selected_date); $auras = getAuras($user_id, $selected_date); $medications = getMedications($user_id, $selected_date); $mood = getMood($user_id, $selected_date); $seizures = getSeizures($user_id, $selected_date); // 调整键名以匹配前端代码中的引用 $data = array( 'appointmentsData' => $appointments, 'aurasData' => $auras, 'medicationsData' => $medications, 'moodData' => $mood, 'seizuresData' => $seizures ); header('Content-Type: application/json'); echo json_encode($data); ?>
2. 修复前端AJAX与DOM操作(diary.php中的
相关产品推荐
相关产品推荐

