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

基于每日排程单元的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版本,这条可以忽略。

调试建议

  1. 打开浏览器开发者工具(F12),切换日历日期时,查看Network标签页,确认units.php是否被请求,返回的JSON数据是否正确。
  2. 检查PHP错误日志,看是否有数据库连接失败、SQL语法错误等问题。
  3. 测试units.php接口:直接传递start和end参数访问,看是否返回符合要求的JSON数组(每个元素包含id和title)。

内容的提问来源于stack exchange,提问作者Josh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:36