基于每日排程单元的FullCalendar动态更新问题求助
FullCalendar Scheduler 动态更新资源(单元)问题解决方案
首先明确说:FullCalendar Scheduler完全支持切换日历日期时同步更新资源,你已经用了正确的核心配置refetchResourcesOnNavigate: true,但代码里有几个细节问题导致功能没生效,下面一步步帮你排查修复:
1. 核心问题:资源查询逻辑错误
你的units.php里用了s.start_time like '$start%'来筛选数据,但FullCalendar传递的start参数是视图的起始时间(比如agendaDay视图会传当天的00:00:00),like匹配只会命中时间字符串完全以start开头的记录,这会漏掉当天其他时段的排程数据。
应该改用时间范围查询,同时修复严重的SQL注入风险(直接拼接参数非常危险):
修正后的units.php代码:
<?php $start = $_POST['start']; $end = $_POST['end']; // 补全你的数据库连接信息 $connect = new PDO('mysql:host=localhost;dbname=your_database_name', 'your_username', 'your_password'); $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 开启错误提示,方便调试 $data = array(); // 安全的预处理查询,用时间范围替代字符串匹配 $query = "SELECT s.id, u.unit_number FROM schedules s LEFT JOIN units u ON u.id = s.unit WHERE s.start_time >= ? AND s.start_time < ?"; $statement = $connect->prepare($query); $statement->execute([$start, $end]); $result = $statement->fetchAll(PDO::FETCH_ASSOC); foreach ($result as $row) { $data[] = array( 'id' => $row["id"], 'title' => $row["unit_number"] ); } // 设置正确的JSON响应头 header('Content-Type: application/json'); echo json_encode($data); ?>
2. 优化前端资源加载逻辑
在calendar.php的资源加载AJAX请求中,明确指定返回类型为JSON,同时添加错误调试信息,方便排查问题:
resources: function(callback, start, end, timezone) { $.ajax({ url: "units.php", type: "POST", data: { start: start.format(), end: end.format(), timezone: timezone }, dataType: "json", // 让jQuery自动解析JSON,避免手动解析的麻烦 success: function(resourceObjects) { callback(resourceObjects); }, error: function(xhr, status, error) { console.error("资源加载失败:", error); // 调试时看控制台输出 } }); },
3. 确认关键配置和版本兼容性
refetchResourcesOnNavigate: true是FullCalendar Scheduler特有的配置,必须确保你加载的scheduler.min.js和fullcalendar.min.js版本完全一致(比如都是v3.10.0),版本不兼容会导致这个配置失效。- 如果你的FullCalendar是v4及以上版本,API有变化,
refetchResourcesOnNavigate需要放在resources配置的子项里,但从你的代码风格看应该是v3版本,这条可以忽略。
调试建议
- 打开浏览器开发者工具(F12),切换日历日期时,查看
Network标签页,确认units.php是否被请求,返回的JSON数据是否正确。 - 检查PHP错误日志,看是否有数据库连接失败、SQL语法错误等问题。
- 测试
units.php接口:直接传递start和end参数访问,看是否返回符合要求的JSON数组(每个元素包含id和title)。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

