使用 Sql 服务器和 PHP jQuery 完整日历中的事件添加和加载问题

Events adding and loading problem in jQuery Full calendar using Sql Server and PHP

我在我的 project.My 事件中使用了 jQuery 完整日历,事件存储在 MS SQL 服务器 table(事件)中,我在 "json" 中获取了数据] 格式,但它不会呈现为完整日历,事件也不会添加到 table 中。...请任何人帮助我....

CREATE TABLE events (
  id  NUMERIC IDENTITY(1,1) NOT NULL,
  title varchar(255) NOT NULL,
  start_event datetime NOT NULL,
  end_event datetime NOT NULL,
  CONSTRAINT [PK_events] PRIMARY KEY CLUSTERED
  ( 
 id ASC 
 )
)

INSERT INTO events(title,start_event,end_event) VALUES
('meeting1', '2019-07-31 00:00:00', '2019-07-31 00:00:00'),
('meeting2', '2019-08-09 00:00:00', '2019-08-09 00:00:00');

application/views/index.php:

$(document).ready(function() {
   var calendar = $('#calendar').fullCalendar({
    editable:true,
    header:{
     left:'prev,next today',
     center:'title',
     right:'month,agendaWeek,agendaDay'
    },
    events: {
      url : '<?php echo site_url('Home/load');?>',
      error: function() 
            {
                alert("error");
            },
      success: function()
            {
                console.log("successfully loaded");
            }
    },
    selectable:true,
    selectHelper:true,
    select: function(start, end, allDay)
    {
     var title = prompt("Enter Event Title");
     if(title)
     {
      var start = $.fullCalendar.formatDate(start,"Y-MM-DD HH:mm:ss");
      var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");
      $.ajax({
       url:"<?php echo site_url('Home/valid_calendar');?>",
       type:"POST",
       data:{title:title, start:start, end:end},
       success:function()
       {
        calendar.fullCalendar('refetchEvents');
        alert("Added Successfully");
       }
      })
     }
    },

application/views/load.php:

$timezone = new DateTimeZone("UTC");

$sql = "select * from events";

$stmt = sqlsrv_query($conn,$sql);

if($stmt == false)
{
    die(print_r(sqlsrv_errors(),true));
}

while($row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC))
{
      $data[] = array(

                  'title' => $row['title'],
                  'start_event' => $row['start_event']->format("Y-m-d H:i:s"),
                  'end_event' => $row['end_event']->format("Y-m-d H:i:s")
             );
}

echo json.parse($data);

我的错误:

Uncaught TypeError: Cannot read property 'hasTime' of undefined

我认为 PHP 日期时间和 Sql 服务器日期时间不匹配... 所以我在事件 load.php

中添加了以下代码
$timezone = new DateTimeZone("UTC");

$data[] = array(

              'title' => $row['title'],
              'start_event' => $row['start_event']->format("Y-m-d H:i:s"),
              'end_event' => $row['end_event']->format("Y-m-d H:i:s")
         );



$(document).ready(function() {
   var calendar = $('#calendar').fullCalendar({
    editable:true,
    header:{
     left:'prev,next today',
     center:'title',
     right:'month,agendaWeek,agendaDay'
    },
    events:" <?php echo site_url('Home/load');?>",
    selectable:true,
    selectHelper:true,
    select: function(start, end, allDay)
    {
     var title = prompt("Enter Event Title");
     if(title)
     {
      var start = $.fullCalendar.formatDate(start,"Y-MM-DD HH:mm:ss");
      var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");
      $.ajax({
       url:"<?php echo site_url('Home/valid_calendar');?>",
       type:"POST",
       data:{title:title, start:start, end:end},
       success:function()
       {
        calendar.fullCalendar('refetchEvents');
        alert("Added Successfully");
       }

它给我的输出为:

[
  {"title":"hi","start_event":"2019-07-31 00:00:00","end_event":"2019-07-31 00:00:00"},
  {"title":"dsfdfdfd","start_event":"2019-08-09 00:00:00","end_event":"2019-08-09 00:00:00"}
]

但是在我的url中:http://localhost/calendar_sql/index.php/Home/load?start=2019-06-30&end=2019-08-11&_=1564490059946

在我的 url 中,我没有将此数据传递到任何地方 开始=2019-06-30&结束=2019-08-11

您为活动提供的 属性 名称不正确。

更仔细地研究 event object documentation。您已经为事件提供 start_eventend_event 属性,但 fullCalendar 期望日期字段为 startend。您不能只是发明 属性 名称并期望 fullCalendar 猜出您如何称呼它们;它们必须与文档中给出的名称相匹配,以便它知道在哪里查找。

错误信息是因为fullCalendar/momentJS找不到定义的start 属性来检查它是否有时间成分。

我希望将您的 PHP 更改为

$data[] = array(
  'title' => $row['title'],
  'start' => $row['start_event']->format("Y-m-d H:i:s"),
  'end' => $row['end_event']->format("Y-m-d H:i:s")
);

应该可以解决您的问题。


P.S。作为一个单独的点,你提到当你调用 /Home/load URL 来获取事件时,URL 最终作为 http://localhost/calendar_sql/index.php/Home/load?start=2019-06-30&end=2019-08-11&_=1564490059946 添加到 start=2019-06-30&end=2019-08-11它。这是意料之中的。根据 events as a JSON feed documentation,fullCalendar 会在联系您的服务器以获取事件数据时自动将这些参数附加到 URL。这个想法是您的服务器应该读取这些 GET 值并使用它们来过滤事件列表 returned 以仅那些在这些日期内发生的事件。这将使 AJAX 调用更有效率,这样您就不会 return 用户未查看的其他日期的大量事件。


P.P.S.

echo json.parse($data);

我认为这是您上面代码中的错字?除非你编写或导入了一些自定义代码,否则 PHP 中没有 json.parse 这样的函数(解析在这里没有意义,你将编码(即创建)JSON,不解析(即阅读)它。我希望这一行应该是

echo json_encode($data);

这是你的真实代码吗?