如何使用php在完整日历中显示数据库中的数据



我想在数据库的完整日历api中显示数据。我在数组中给出数据,但在控制台中显示未定义的数据,而在日历中不显示数据。这是一个日程日历,我想在日历中显示日程数据。数据不会显示在日历中,但会显示在console.log中。

function get_schecdule($id2)
{

$sql = "SELECT * FROM `schedule` where `id`='0' or `id`='$id2'";
$result = myQuery($sql) or die("Query Failed.");
$row = myFetchArray($result);

$schedule_list = $row['schedule_list'];
$events = json_decode($schedule_list, true);
$arr = [];
foreach ($events as $event) {
$type = $event['type'];
$id1 = $event['id'];
if ($type === 'asset') {

$sql_assets = "SELECT * FROM `assets` WHERE `assets_id`='$id1'";
$result_assets = myQuery($sql_assets);
$row_assets = myFetchArray($result_assets);
$name = $row_assets['name'];
} elseif ($type === 'playlist') {

$sql_playlists = "SELECT * FROM `playlist` WHERE `id`='$id1'";
$result_playlists = myQuery($sql_playlists);
$row_playlists = myFetchArray($result_playlists);
$name = $row_playlists['playlist_name'];
}
$start = str_replace(' ', 'T', $event['start_datetime']);
$end = str_replace(' ', 'T', $event['end_datetime']);

$r = '
{
"title": "' . $name . '",
"start": "' . $start . '",
"end": "' . $end . '"
}
';
array_push($arr, $r);
}

return json_encode($arr);
}

window.addEventListener('load', function() {
calendar.destroy()
start_load()
let searchParams = new URLSearchParams(window.location.search);
let id = searchParams.get('edit')
$.ajax({
url: 'get_schecdule.php',
method: 'POST',
data: {
id: id
},
success: function(resp) {
if (resp) {
resp = JSON.parse(resp)
var evt = [];
if (resp.length > 0) {
Object.keys(resp).map(k => {
var obj = {};
obj['title'] = resp[k].title
obj['start'] = resp[k].start
obj['end'] = resp[k].end;

evt.push(obj)
})
console.log(evt)

}
calendar = new FullCalendar.Calendar(calendarEl, {
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
},
initialDate: '<?php echo date('Y-m-d') ?>',
weekNumbers: true,
navLinks: true,
editable: false,
selectable: true,
nowIndicator: true,
dayMaxEvents: true,
select: function(info) {
var text = info.startStr.replace("T", " ");
var text2 = info.endStr.replace("T", " ");
document.getElementById("start-date").value = text.replace("+05:00", " ");
document.getElementById("end-date").value = text2.replace("+05:00", " ");
$('#exampleModal1').modal('show');
},
events: evt,
eventClick: function(e, el) {
var data = e.event.extendedProps;
alert(data.data_id);
uni_modal('View Schedule Details', 'view_schedule.php?id=' + data.data_id, 'mid-large')

}
});
}


[1]: https://i.stack.imgur.com/QVqqw.jpg

您的变量$r是一个字符串,用于尝试生成JSON格式的数据。您将这个字符串放入一个数组中,然后对数组进行JSON编码。这样做的结果是,你最终对已经是字符串的比特进行了双重编码。FullCalendar无法读取事件数据,因为它隐藏在一个双重编码的字符串中。

以下是一个孤立出现的问题的简单演示:https://3v4l.org/HLUEp

这里的一条黄金法则是:永远不要手工构建JSON。你会面临这种意外的双重编码的风险,也会因为你没有正确地转义某些字符,或者你只是拼写错误或其他什么而导致意外的语法错误。始终只需构建一个包含要输出的数据的PHP数据结构,然后让json_encode函数在最后一次处理整个事情的编码。这更可靠,而且在您可能希望同时以其他方式操作数据或以不同方式输出数据的情况下也更灵活。

以下是应该如何填充$r:

$r = [
"title" => $name,
"start" => $start,
"end" => $end
];
array_push($arr, $r);   

工作演示:https://3v4l.org/2rlOG


p。S.由于您的数据(现在(是fullCalendar所需的格式,因此在AJAX调用完成后,应该没有理由在JavaScript代码中对其进行转换。在您的";成功;回调我认为你可以替换所有这些:

resp = JSON.parse(resp)
var evt = [];
if (resp.length > 0) {
Object.keys(resp).map(k => {
var obj = {};
obj['title'] = resp[k].title
obj['start'] = resp[k].start
obj['end'] = resp[k].end;
})
console.log(evt)
}

简单地说:

var evt = JSON.parse(resp);

相关内容

  • 没有找到相关文章

最新更新