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

$.getJSON配合evoCalendar使用时日历事件无法正常显示问题

问题原因

  • 核心原因是$.getJSON属于异步网络请求,你当前的代码执行顺序有误,在请求还没返回结果时就已经执行了日历初始化逻辑,此时calEvents还是未赋值的空值/undefined,日历初始化阶段没有拿到有效事件数据,自然无法渲染。
  • 次要可能原因:
    • 接口返回的JSON结构和你硬编码的结构不一致,比如外层多了接口通用包装层(例如{code:200, data: [...], msg:"success"}),你直接把返回的整体传给calendarEvents导致结构不匹配
    • 网络请求被跨域限制、请求地址报错404/500,导致JSON没有正常获取到,calEvents没有被正确赋值

解决方法

方案1:在getJSON回调中初始化日历

等异步请求拿到数据之后再执行日历初始化,确保传入的事件数据已经是有效值:

$.getJSON("JSON URL", function(json) {
  // 可以先在控制台打印确认返回的json和你硬编码的结构完全一致
  console.log(json);
  // 拿到数据后再初始化日历
  $('#evoCalendar').evoCalendar({
    todayHighlight: true,
    sidebarToggler: true,
    eventListToggler: true,
    canAddEvent: false,
    calendarEvents: json, // 如果返回的json外层有包装,这里替换为对应字段,比如json.data
    onSelectDate: function() {
        // console.log('onSelectDate!')
    },
    onAddEvent: function() {
        console.log('onAddEvent!')
    }
  });
});

方案2:先初始化日历,拿到数据后动态更新事件

如果你需要提前渲染日历框架,后续再加载事件,可以调用evoCalendar提供的动态添加事件方法更新:

// 先初始化日历,此时可以传空的事件数组
$('#evoCalendar').evoCalendar({
  todayHighlight: true,
  sidebarToggler: true,
  eventListToggler: true,
  canAddEvent: false,
  calendarEvents: [],
  onSelectDate: function() {
      // console.log('onSelectDate!')
  },
  onAddEvent: function() {
      console.log('onAddEvent!')
  }
});

// 异步请求获取事件
$.getJSON("JSON URL", function(json) {
  // 调用evoCalendar的addEvent方法批量添加事件
  $('#evoCalendar').evoCalendar('addEvent', json);
});

排查校验步骤

如果上述方法仍不生效,可按顺序排查:

  1. 打开浏览器控制台,查看$.getJSON请求是否正常返回,有没有跨域、404、500等报错
  2. 打印请求返回的json值,对比你硬编码的事件结构,确认完全一致,没有多余的嵌套层级
  3. 检查返回的日期格式是否和硬编码的格式完全统一,避免多余空格、大小写错误等问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:12:01