FullCalendar.io 不显示来自 JSON 的事件
FullCalendar.io not displaying events fed from JSON
我试过很多方法来填充日历的events
。我试过将 JSON 数据放入一个变量中并执行 events = result
并且我已经尝试过 AJAX 就像我现在所做的那样。数据是从 php 函数中获取的,它是正确的语法,我控制台记录数据,这是返回的内容:{title: 1, start: "2020-07-23"}
。所以我不确定为什么会这样。
$('#calendar').fullCalendar({
events:
{
url: '/modules/ajax/ajax_handler.php',
method: 'POST',
data: data,
success: function(response) {
console.log(response);
},
failure: function() {
alert('there was an error while fetching events!');
},
}
});
Ajax 处理程序:
elseif($_POST['action'] == 'getPeopleCountOnDate') {
$date = $_POST['date'];
$count = getPeopleCountOnDate($connection, $date);
echo $count;
}
PHP 脚本
function getBookingEventInfo($connection) {
$dates;
$query = "SELECT reservation_date, count(*) FROM bookings GROUP BY reservation_date";
if($stmt = $connection->prepare($query)){
$stmt->execute();
$stmt->bind_result($date, $count);
while($stmt->fetch()){
$dates = array(
"title" => $count,
"start" => formatDate($date, 14)
);
}
$stmt->close();
}
return json_encode($dates);
}
更新 2:以防万一,我会删除成功回调,也许它会阻止您的日历组件获取数据,因为它可能是一种拦截器。
更新:我认为您在 json 中返回的事件的格式可能不正确。在 the docs 他们说 start 应该是一个完整的时间戳。我认为 YYYY-MM-DD 可能还不够,但还要添加缺少的部分(例如:2009-11-05T13:15:30Z)
你读过the docs了吗?
有人认为您的回答中有一个模糊不清的地方是,您作为 data 传递了什么?
看看文档,他们使用 eventSources 作为数组。
如果 response
仅包含 {title: 1, start: "2020-07-23"}
正如您在问题中提到的那样,那么您就有问题了,因为它不是数组。
FullCalendar 需要一组事件,而不是单个对象。即使该数组只包含 1 个事件,它也必须仍然是一个数组。您的服务器需要 return [{title: 1, start: "2020-07-23"}]
作为 JSON 才能正常工作。
要在您的 PHP 代码中实现这一点,您可以这样编写:
function getBookingEventInfo($connection) {
$dates = array(); //declare an array to contain all the results
$query = "SELECT reservation_date, count(*) FROM bookings GROUP BY reservation_date";
if($stmt = $connection->prepare($query)){
$stmt->execute();
$stmt->bind_result($date, $count);
while($stmt->fetch()){
//push the query result into the main array
$dates[] = array(
"title" => $count,
"start" => formatDate($date, 14)
);
}
$stmt->close();
}
return json_encode($dates);
}
我试过很多方法来填充日历的events
。我试过将 JSON 数据放入一个变量中并执行 events = result
并且我已经尝试过 AJAX 就像我现在所做的那样。数据是从 php 函数中获取的,它是正确的语法,我控制台记录数据,这是返回的内容:{title: 1, start: "2020-07-23"}
。所以我不确定为什么会这样。
$('#calendar').fullCalendar({
events:
{
url: '/modules/ajax/ajax_handler.php',
method: 'POST',
data: data,
success: function(response) {
console.log(response);
},
failure: function() {
alert('there was an error while fetching events!');
},
}
});
Ajax 处理程序:
elseif($_POST['action'] == 'getPeopleCountOnDate') {
$date = $_POST['date'];
$count = getPeopleCountOnDate($connection, $date);
echo $count;
}
PHP 脚本
function getBookingEventInfo($connection) {
$dates;
$query = "SELECT reservation_date, count(*) FROM bookings GROUP BY reservation_date";
if($stmt = $connection->prepare($query)){
$stmt->execute();
$stmt->bind_result($date, $count);
while($stmt->fetch()){
$dates = array(
"title" => $count,
"start" => formatDate($date, 14)
);
}
$stmt->close();
}
return json_encode($dates);
}
更新 2:以防万一,我会删除成功回调,也许它会阻止您的日历组件获取数据,因为它可能是一种拦截器。
更新:我认为您在 json 中返回的事件的格式可能不正确。在 the docs 他们说 start 应该是一个完整的时间戳。我认为 YYYY-MM-DD 可能还不够,但还要添加缺少的部分(例如:2009-11-05T13:15:30Z)
你读过the docs了吗?
有人认为您的回答中有一个模糊不清的地方是,您作为 data 传递了什么? 看看文档,他们使用 eventSources 作为数组。
如果 response
仅包含 {title: 1, start: "2020-07-23"}
正如您在问题中提到的那样,那么您就有问题了,因为它不是数组。
FullCalendar 需要一组事件,而不是单个对象。即使该数组只包含 1 个事件,它也必须仍然是一个数组。您的服务器需要 return [{title: 1, start: "2020-07-23"}]
作为 JSON 才能正常工作。
要在您的 PHP 代码中实现这一点,您可以这样编写:
function getBookingEventInfo($connection) {
$dates = array(); //declare an array to contain all the results
$query = "SELECT reservation_date, count(*) FROM bookings GROUP BY reservation_date";
if($stmt = $connection->prepare($query)){
$stmt->execute();
$stmt->bind_result($date, $count);
while($stmt->fetch()){
//push the query result into the main array
$dates[] = array(
"title" => $count,
"start" => formatDate($date, 14)
);
}
$stmt->close();
}
return json_encode($dates);
}