【问题标题】:Events adding and loading problem in jQuery Full calendar using Sql Server and PHP使用 Sql Server 和 PHP 在 jQuery Full 日历中添加和加载事件
【发布时间】:2019-07-30 13:59:55
【问题描述】:

我在我的项目中使用了 jQuery 完整日历。我的事件存储在 MS SQL Server 表(事件)中,我以“json”格式获取数据,但它没有呈现到完整日历中,事件也没有添加到表中....请任何人帮助我....

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

应用程序/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");
       }
      })
     }
    },

应用程序/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);

我的错误:

未捕获的类型错误:无法读取未定义的属性“hasTime”

我认为 PHP 日期时间和 Sql Server 日期时间不匹配... 所以我在 events 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"}
]

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

在我的网址中,我没有在任何地方传递这些数据 开始=2019-06-30&结束=2019-08-11

【问题讨论】:

    标签: php jquery sql-server fullcalendar fullcalendar-3


    【解决方案1】:

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

    更仔细地研究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")
    );
    

    应该可以解决您的问题。


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


    附言

    echo json.parse($data);
    

    我认为这是您上面代码中的拼写错误?除非您编写或导入了一些自定义代码,否则 PHP 中没有像 json.parse 这样的函数(并且在这里解析毫无意义,您将编码(即创建)JSON,而不是解析(即读取)它。我会期望这一行应该是

    echo json_encode($data);
    

    那是你的真实代码吗?

    【讨论】:

    • 非常感谢...您的解决方案...它对我加载事件很有用...但是现在我想添加事件...到今天结束时我必须提交此任务...
    • 我不知道 Javascript、jQuery 和 Ajax,这对我来说是个大问题......但是无论如何我必须在一天结束之前提交这个任务......我只是用谷歌搜索并配置了加载事件.....
    • @SowmyaGayam 如果有效,请将答案标记为“已接受”,谢谢。 (您可以单击刻度线将其变为绿色来执行此操作)。对于您在添加事件方面的其他问题,我认为您已经对此有另一个问题,我对此发表了评论。因此,如果您对此还有其他问题,请回复这些 cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多