使用 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_event
和 end_event
属性,但 fullCalendar 期望日期字段为 start
和 end
。您不能只是发明 属性 名称并期望 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);
这是你的真实代码吗?
我在我的 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_event
和 end_event
属性,但 fullCalendar 期望日期字段为 start
和 end
。您不能只是发明 属性 名称并期望 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);
这是你的真实代码吗?