我应该如何处理 JSON 提要 returns 没有结果?
How should I handle a JSON feed that returns no result?
请原谅我的第一个问题和一般的经验不足。我正在使用 FullCalendar 5.10.1 来 return 与节日动态关联的事件。
此实例使用文档中的 'events (as a json feed)' 模式。在所有情况下,即使有一个事件与节日动态关联 selected,一切都很好。日历与事件一起正确显示。
但是,如果提要找不到至少一个与节日相关的事件 select,则会立即 return 编辑失败回调。此时,控制台显示错误 'Failure parsing JSON'。如果通过单击“确定”关闭失败回调消息,则空日历将按预期加载。
很明显我没有处理这种情况(没有事件),但我不确定是否需要在 Feed SQL 或 FullCalendar 代码中处理它。
请注意,它在 Bootstrap 选项卡内运行。我在这里留下了一些 hacky 代码,将 var 设置为日历选项卡的 id 并延迟日历加载以解决与供应商主题的争用问题。
我很确定我没有以首选方式在此处显示代码,并且可能没有足够仔细地描述问题。但是,如果对这位新手有任何见解,我们将不胜感激。
<script type="text/javascript">
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 => {
setTimeout(() => {calendar.render()}, 1);
});
});
</script>
供稿SQL
<%@ Control Language="vb" AutoEventWireup="false" Inherits="KnowBetter.XModPro.FeedBase" %>
<%@ Register Assembly="KnowBetter.XModPro.Web.Controls" Namespace="KnowBetter.XModPro.Web.Controls" TagPrefix="xmod" %>
<xmod:masterview runat="server">
<xmod:JsonFeed runat="server">
<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">
<Parameter Name = "FestivalID" value= '<%#FormData("FestivalID")%>' DataType="string" />
</ListDataSource>
</xmod:JsonFeed></xmod:masterview>
我会留下我的 'solution',希望它能对以后的人有所帮助。我只是使用 UNION 将空事件记录添加到提要结果,这样当没有 'real' 事件时 FullCalendar 仍然有效。也许不是最优雅或写得最好的语法,但 FullCalendar 很开心,我也是。
<ListDataSource CommandText="SELECT
null AS 'id',
null AS 'vid',
null AS 'FestivalID',
null AS 'title',
null AS 'description',
null AS 'start',
null AS 'end'
UNION
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">
<Parameter Name = "FestivalID" value= '[[Form:FestivalID]]' DataType="int32"/>
请原谅我的第一个问题和一般的经验不足。我正在使用 FullCalendar 5.10.1 来 return 与节日动态关联的事件。
此实例使用文档中的 'events (as a json feed)' 模式。在所有情况下,即使有一个事件与节日动态关联 selected,一切都很好。日历与事件一起正确显示。
但是,如果提要找不到至少一个与节日相关的事件 select,则会立即 return 编辑失败回调。此时,控制台显示错误 'Failure parsing JSON'。如果通过单击“确定”关闭失败回调消息,则空日历将按预期加载。
很明显我没有处理这种情况(没有事件),但我不确定是否需要在 Feed SQL 或 FullCalendar 代码中处理它。
请注意,它在 Bootstrap 选项卡内运行。我在这里留下了一些 hacky 代码,将 var 设置为日历选项卡的 id 并延迟日历加载以解决与供应商主题的争用问题。
我很确定我没有以首选方式在此处显示代码,并且可能没有足够仔细地描述问题。但是,如果对这位新手有任何见解,我们将不胜感激。
<script type="text/javascript">
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 => {
setTimeout(() => {calendar.render()}, 1);
});
});
</script>
供稿SQL
<%@ Control Language="vb" AutoEventWireup="false" Inherits="KnowBetter.XModPro.FeedBase" %>
<%@ Register Assembly="KnowBetter.XModPro.Web.Controls" Namespace="KnowBetter.XModPro.Web.Controls" TagPrefix="xmod" %>
<xmod:masterview runat="server">
<xmod:JsonFeed runat="server">
<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">
<Parameter Name = "FestivalID" value= '<%#FormData("FestivalID")%>' DataType="string" />
</ListDataSource>
</xmod:JsonFeed></xmod:masterview>
我会留下我的 'solution',希望它能对以后的人有所帮助。我只是使用 UNION 将空事件记录添加到提要结果,这样当没有 'real' 事件时 FullCalendar 仍然有效。也许不是最优雅或写得最好的语法,但 FullCalendar 很开心,我也是。
<ListDataSource CommandText="SELECT
null AS 'id',
null AS 'vid',
null AS 'FestivalID',
null AS 'title',
null AS 'description',
null AS 'start',
null AS 'end'
UNION
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">
<Parameter Name = "FestivalID" value= '[[Form:FestivalID]]' DataType="int32"/>