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

使用FullCalendar 3.8对接REST接口加载预约数据遇问题求指导

问题分析与解决方案

我帮你梳理下代码里的几个关键问题,这些应该就是导致预约数据无法正确渲染到FullCalendar的原因:

1. 冗余的events回调嵌套

你已经在AJAX的success回调里拿到了完整的预约数据result,但又把它套进了FullCalendar的动态events回调中——这完全没必要。动态events回调是用来按需加载数据(比如切换月份时重新请求后端)的,而你已经一次性获取了所有数据,直接把处理好的事件数组传给events选项即可。

2. 时间格式处理错误

后端返回的timeStart和timeEnd是毫秒级时间戳(数字类型),但你调用了toISOString()方法——数字类型并没有这个方法(只有Date对象才有),这会直接抛出JS错误,导致事件无法生成。

FullCalendar 3.8支持直接接收毫秒时间戳,或者用Moment对象包裹(你已经引入了moment.js),两种方式都能正确解析。

3. 默认日期与数据日期不匹配

你的代码里defaultDate设置为'2014-11-13',但示例数据的时间戳对应的是2017年12月左右,打开日历后默认显示2014年的月份,自然看不到2017年的预约事件——这是很容易忽略的细节!

4. GET请求无需设置contentType

contentType: 'application/json'是用来告知服务器请求体的格式,但GET请求没有请求体,这个设置不仅没用,还可能引发不必要的兼容性问题,建议移除。


修正后的完整代码

$(document).ready(function() { 
  var value=2; 
  returnReservationsCalendar(value); 
});

function returnReservationsCalendar(value){
  var serviceEndpoint = 'http://localhost:8080/sale/'+value+'/reservations';
  $.ajax({
    type : 'GET',
    url: serviceEndpoint,
    dataType: 'json',
    // 移除不必要的contentType设置
    success: function (result) {
      // 先把后端数据转换成FullCalendar需要的事件格式
      var calendarEvents = result.map(function(item) {
        return {
          id: item.idReservation, // 保留预约ID,方便后续编辑、点击事件等操作
          title: `预约 ${item.idReservation}`, // 用实际预约ID做标题比"Event index"更有意义
          start: item.timeStart, // 直接传毫秒时间戳,FullCalendar会自动解析
          end: item.timeEnd,
          // 可以把其他后端字段也带上,后续事件交互时能用到
          idUser: item.idUser,
          idSale: item.idSale
        };
      });

      // 初始化FullCalendar,直接传入处理好的事件数组
      $('#calendar').fullCalendar({
        header: { 
          left: 'prev,next today', 
          center: 'title', 
          right: 'month,agendaWeek,agendaDay' 
        },
        defaultDate: moment(), // 设置为当前日期,也可以用数据里的第一个事件时间:moment(result[0].timeStart)
        editable: true,
        eventLimit: true,
        events: calendarEvents // 直接使用处理好的事件数组
      });
    },
    error: function () { 
      alert('获取预约数据失败!'); 
    }
  });
}

额外排查建议

  • 打开浏览器开发者工具(F12),切换到Console标签页,查看是否有JS错误——这是前端问题排查最直接的方式,比如之前的toISOString()错误会在这里明确显示。
  • 如果后续需要按日期范围动态加载数据(比如切换月份时请求对应时间段的预约),可以把AJAX请求放到FullCalendar的events回调里,此时需要用start和end参数(Moment对象)向后端传递日期范围,后端返回对应数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:30:18