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

FullCalendar加载动态日程报callback is not a function错误及事件异常

问题根因定位与解决方案

一、callback is not a function 报错问题

根因

你当前使用的FullCalendar版本早已废弃了旧版的4参数events函数写法:

  • FullCalendar v3及更早版本的events函数签名为 function(start, end, timezone, callback),需要手动调用末尾的callback参数回传事件数据
  • FullCalendar v4及之后版本,完全重构了事件加载的参数逻辑,函数签名调整为 function(fetchInfo, successCallback, failureCallback),原位置的第四个参数早已不存在,你强行把第四个形参命名为callback并调用时,实际拿到的是无函数属性的普通值,因此触发类型错误。

这类报错大多是参考v3版本的老旧接入教程写代码、升级到新版本后没有同步调整参数逻辑导致的。

修复方案

替换events配置的回调传参逻辑,适配新版本的参数规则,参考代码:

events: function(fetchInfo, successCallback, failureCallback) {
  jQuery.ajax({
    url: "/getAllCitas",
    type: "GET",
    success: function (doc) {
      // 事件组装逻辑保持原有结构
      var events = [];
      doc.forEach(function (evt) {
        events.push({
          title: evt.paciente?.nombre || '未命名预约',
          start: evt.date,
          end: evt.date
        });
      });
      // 调用第二个入参的官方successCallback回传数据,而非自定义的第四个形参
      successCallback(events);
    },
    error: function(err) {
      // 加载失败时调用错误回调,避免日历组件渲染卡住
      failureCallback(err);
    }
  });
}

如果使用现代语法,也可以直接通过Promise返回事件数据,省去手动回调的逻辑:

events: async function(fetchInfo) {
  const res = await fetch('/getAllCitas');
  const doc = await res.json();
  return doc.map(evt => ({
    title: evt.paciente?.nombre || '未命名预约',
    start: evt.date,
    end: evt.date
  }));
}

二、事件title为undefined的问题

根因

从你输出的控制台结果可以判断,接口返回的paciente字段存在多版本数据结构混用的情况:

  • 部分历史预约记录的paciente字段为空(null/未赋值),直接读取evt.paciente会返回undefined
  • 部分预约记录采用关联外键存储患者信息,因为后端populate逻辑失效,直接返回了患者表的ObjectID(即你看到的603fd0e423f0d241ecfdd337这类异常值)
  • 少数预约记录的关联查询执行正常,返回了类似Carlos的正常姓名字符串

修复方案

  1. 先在控制台打印单条evt的完整结构,确认患者名字的实际存储路径,避免字段路径匹配错误
  2. 组装事件时增加兜底逻辑,避免空值显示:
    events.push({
      title: evt.paciente?.nombre || evt.paciente || '未命名预约',
      start: evt.date,
      end: evt.date
    });
    
  3. 优化后端接口的关联查询逻辑,确保所有预约记录的患者信息都能被正确关联,不要直接把外键ID暴露在接口返回中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 05:06:07