【发布时间】:2020-10-04 21:31:34
【问题描述】:
我需要使用 AJAX 从数据库中获取一些事件并将它们显示在我的完整日历中。问题是我的 JSON 提要没有 start 和 end,但所有日期都由 , 分隔(例如:15-06-2020,16-06-2020)我希望使用 @987654327 @ 并从那里设置值但无法使其工作。这是我尝试过的
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: ['dayGrid'],
editable: true,
firstDay: 1,
eventLimit: true,
events: function(start, end, callback) {
$.ajax({
type: "GET",
url: "http://localhost:8092/api/leavecal/getleavesbyemp/200027502420",
dataType: "json",
success: function(data) {
var eventsList = [];
var count = 0;
while (count < data.length) {
var dateArray = data[count].date.split(',');
var startDate = dateArray[0];
var endDate = dateArray[dateArray.length - 1];
eventsList.push({
start: startDate,
end: endDate
});
console.log(startDate + " " + endDate);
count++
}
callback(eventsList);
}
});
}
});
calendar.render();
});
<div id="calendar"></div>
我不知道从这里去哪里
【问题讨论】:
-
您需要以支持的格式提供您的日期,该格式没有任何歧义的余地。例如yyyy-mm-dd 更好,因为 a) 它受 JS Date / fullCalendar 支持(请参阅fullcalendar.io/docs/date-parsing),并且 b) 它不能在 dd-mm-yyyy 和 mm-dd-yyyy 之间混淆。当您使用它时,为什么不更改您的 API,以便它也在单独的字段中输出日期?
-
另外
events: function(start, end, callback) {不正确 - 请参阅fullcalendar.io/docs/events-function。 (我假设您在没有意识到的情况下从 v3 代码中获取了一个示例。v4 具有不同的语法)。而且您确实应该将提供的开始日期和结束日期发送到您的服务器,以便它可以将返回的结果限制为仅当前日历中实际需要的结果 - 否则,如果您有很多历史事件(一旦您的应用程序活一段时间),你最终会毫无意义地下载大量数据,其中 90% 永远不会被查看。 -
@ADyson 我将日期更改为 yyy-mm-dd 格式,感谢您的提示。正如您提到的,我不小心使用了 v3 功能。我尝试使用网站中给出的 v4 格式,但我现在有点困惑。我应该对 ajax 使用相同的格式,还是可以使用我使用的
"GET"方法? -
“我应该对 ajax 使用相同的格式吗”...是的,这与函数语法的更改无关。您的主要问题是
callback()不会将事件发送回 fullCalendar,因为它是函数的错误输入参数。无论如何,下面的答案应该对您有所帮助
标签: javascript jquery date fullcalendar fullcalendar-4