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);
}