#javascript #json #ajax #fullcalendar #fullcalendar-5
Вопрос:
Пожалуйста, простите мой первый вопрос и общий опыт. Я использую FullCalendar 5.10.1 для возврата событий, которые динамически связаны с фестивалями.
Этот экземпляр использует шаблон » события (как канал json)» из документации. Во всех случаях, если есть хотя бы одно событие, связанное с динамически выбранным Фестивалем, все хорошо. Календарь правильно отображается вместе с событием(событиями).
Однако, если в ленте не найдено хотя бы одно событие, связанное с выбором фестиваля, обратный вызов об ошибке возвращается немедленно. В этот момент консоль показывает ошибку «Сбой при разборе JSON». Если сообщение об обратном вызове с ошибкой отклоняется нажатием кнопки «ОК», пустой календарь затем загружается, как и ожидалось.
Ясно, что я не обрабатываю это условие (никаких событий), но я не уверен, нужно ли его обрабатывать в SQL-канале или в коде FullCalendar.
Обратите внимание, что это выполняется внутри вкладки начальной загрузки. Я оставил здесь какой-то хакерский код, который устанавливает var для идентификатора вкладки календаря и задерживает загрузку календаря, чтобы решить проблему разногласий с темой поставщиков.
Я совершенно уверен, что не показал код здесь предпочтительным способом и, вероятно, недостаточно тщательно описал проблему. Но любое понимание этого новичка будет оценено по достоинству.
lt;script type="text/javascript"gt; document.addEventListener('DOMContentLoaded', function() { var calendarButton = document.getElementById('calendarButton'); var calendarEl = document.getElementById('calendar'); var calendar = new FullCalendar.Calendar(calendarEl, { themeSystem: 'bootstrap', headerToolbar: { left: 'prev,next today', center: 'title', right: 'dayGridMonth,timeGridWeek,timeGridDay' }, weekNumberCalculation: "ISO", initialView: 'dayGridMonth', initialDate: '2021-07-01', eventDidMount: function(info) { $(info.el).tooltip({ title: info.event.extendedProps.description, placement: 'top', trigger: 'hover', container: 'body' }); }, eventSources: [ { url: '/DesktopModules/XModPro/Feed.aspx', method: 'POST', datatype: 'JSON', extraParams: { pid: '0', xfd: 'Events_FullCalendar_FestivalID', FestivalID: '[[FestivalID]]' }, failure: function() { alert('There was an error while fetching events!'); }, color: '#a1a535', // a non-ajax option textColor: 'white' // a non-ajax option } ] }); calendarButton.addEventListener('click', e =gt; { setTimeout(() =gt; {calendar.render()}, 1); }); }); lt;/scriptgt;
Подача SQL
lt;%@ Control Language="vb" AutoEventWireup="false" Inherits="KnowBetter.XModPro.FeedBase" %gt; lt;%@ Register Assembly="KnowBetter.XModPro.Web.Controls" Namespace="KnowBetter.XModPro.Web.Controls" TagPrefix="xmod" %gt; lt;xmod:masterview runat="server"gt; lt;xmod:JsonFeed runat="server"gt; lt;ListDataSource CommandText="SELECT EventID AS 'id', VenueID AS 'vid', FestivalID, EventTitle AS 'title', EventDescription AS 'description', EventStartTime AS 'start', EventEndTime AS 'end' FROM la360_Event WHERE FestivalID = @FestivalID"gt; lt;Parameter Name = "FestivalID" value= 'lt;%#FormData("FestivalID")%gt;' DataType="string" /gt; lt;/ListDataSourcegt; lt;/xmod:JsonFeedgt;lt;/xmod:masterviewgt;
Комментарии:
1. Есть ли у вас возможность изменить (или запросить изменение) кода ленты? Он должен возвращать пустой массив, когда нет событий. Похоже, что в настоящее время он возвращает значение null, что на самом деле является недостатком дизайна. Тип ответа должен быть согласованным во всех случаях. Это, безусловно, лучший способ решить эту проблему.
2. Да, у меня действительно есть доступ к ленте. Я убедился, что текущий канал действительно возвращает нуль, а не пустой массив [ ]. Я отредактировал вопрос, чтобы включить SQL-запрос. Мне непонятно, как обеспечить возврат пустого массива против нуля. До сих пор поиск SO не дал никакого представления. Моя благодарность за любую помощь и мои извинения за проблемы с исходным форматированием, которые были устранены.
3. Спасибо. Где находится код Feed.aspx? Я предполагаю, что есть нечто большее, чем просто этот источник данных, иначе он не превратил бы его в JSON
4. Приведенный выше SQL написан с использованием плагина (XModPro) для CMS (DNN). Модуль подачи, в котором живет этот SQL, похоже, наследует другой код XModPro, на который я не могу ссылаться. Несчастный. Я опубликовал этот вопрос на их форуме поддержки более недели назад, но ответа не получил. На данный момент это, по-видимому, модуль, который не поддерживается. Так что, боюсь, мне придется найти обходной путь.
5. Можешь ли ты просто написать свою собственную маленькую asp.net скрипт для выполнения того же запроса, но правильно преобразует его в JSON? Я не знаю конкретно эту CMS, но большинство из них позволяют добавлять пользовательский код.