我已经尝试了许多方法来提供日历的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);
}
如果response
只包含{title: 1, start: "2020-07-23"}
,正如您在问题中提到的,那么您就有问题了,因为它不是数组。
FullCalendar需要一个事件数组,而不是单个对象。即使该数组只包含1个事件,它也必须是一个数组。您的服务器需要将[{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);
}
Update2:为了以防万一,我会删除成功回调,也许它会阻止您的日历组件获取数据,因为它可能是一种拦截器。
更新:我认为您在json中返回的事件可能格式不正确。在文档中,他们说开始应该是一个完整的时间戳。我认为YYYY-MM-DD可能不够,但也加上缺失的部分(例如:2009-11-05T13:15:30Z(
你读过文件吗?
你的答案中有一个模糊的想法,那就是,你通过了什么数据?看看文档,他们使用eventSources作为数组。