我将 FullCalendar 与 Laravel 一起使用,每次我尝试执行下一个/上一个操作时都会调用我的 Ajax 事件调用,如何防止这种情况发生?我希望它只获取一次事件,并且仅当我选中其他日历的复选框时才能将它们合并在一起。
这是我的代码:
$(".calendar_list").each(function () {
if (this.checked) {
selectedCalendars.push($(this).val());
}
});
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'dayGridMonth',
lazyFetching: true, // tried with and without
headerToolbar: {
left: 'prev,next today addEventButton',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
events: {
url: SITEURL + '/calendarsAjax',
method: 'GET',
extraParams: {
calendar_ids: selectedCalendars
},
success: function() {
},
failure: function (e) {
console.log(e);
}
},
});
calendar.render();
}
document.addEventListener('DOMContentLoaded', function() {
getCalendar();
});
我尝试过延迟加载,它仍然出现。
我同意蒂姆刘易斯的评论......你为什么要阻止这种情况?这就是它的工作原理。
您可能没有意识到的是(根据文档https://fullcalendar.io/docs/events-json-feed)fullCalendar将在每个请求中发送您的服务器“开始”和“结束”参数,代表日历上当前显示的最早和最晚日期。您的服务器应该使用这些来过滤其数据,并且仅返回落在这些日期内或重叠的事件数据。
这通常比首次加载日历时下载数据库中的每个事件要高效得多 - 因为事件列表会随着时间的推移而大幅增长,并且在大多数情况下,用户可能永远不会查看绝大多数事件他们。因此,您应该希望它只下载可能相关的事件,并在用户实际要看到它们时按需执行此操作。