我知道在这些论坛上多次询问过这个问题(我知道因为我在过去几天一直在漫游这些论坛以寻找解决方案),但我仍然找不到合适的解决方案。
我正在使用FullCalendar插件并尝试通过JSON Feed文件的URL来加载显示的事件。当我直接在JS文件中插入对象时,它可以正常工作:
events: [
{
"title": "mytitle1",
"start": "2017-10-12T12:00:00Z",
"end": "2017-10-12T14:00:00Z"
},
{
"title": "mytitle2",
"start": "2017-10-12T15:00:00Z",
"end": "2017-10-12T17:00:00Z"
}
]
但是当我使用URL时,事件将不会显示。这是JS脚本。它应该有其他功能,如eventClick,选择等...但我已经评论出来,因为它们似乎与问题无关:
$(document).ready(function(){
var calendar = $('#calendar').fullCalendar({
header:{
left: 'prev,next, today',
center: 'title',
right: 'agendaWeek,agendaDay'
},
defaultView: 'agendaWeek',
buttonIcons:{
prev: 'left-single-arrow',
next: 'right-single-arrow'
},
editable: true,
selectable: true,
allDaySlot: false,
slotDuration: '00:15:00',
slotLabelInterval: '01:00:00',
events: "json.php"
})
});
最终我想用来自数据库的输入填充JSON文件,但是现在甚至在json.php文件中创建简单对象,使用json_encode并回显结果不会使事件显示。
json.php脚本:
class TestClass{
var $title;
var $start;
var $end;
}
$var1 = new TestClass();
$var1 -> title = "mytitle1";
$var1 -> start = "2017-10-12T12:00:00Z";
$var1 -> end = "2017-10-12T14:00:00Z";
$var2 = new TestClass();
$var2 -> title = "mytitle2";
$var2 -> start = "2017-10-12T15:00:00Z";
$var2 -> end = "2017-10-12T17:00:00Z";
$arr = array($var1, $var2);
$arrjson = json_encode($arr, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo "<pre>" . $arrjson . "</pre>";
运行json.php文件时,我得到一个正确的JSON字符串(由jsonlint.com验证并直接插入JS文件,如上所示):
[
{
"title": "mytitle1",
"start": "2017-10-12T12:00:00Z",
"end": "2017-10-12T14:00:00Z"
},
{
"title": "mytitle2",
"start": "2017-10-12T15:00:00Z",
"end": "2017-10-12T17:00:00Z"
}
]
但事件仍然不会显示。 我已经尝试过更改日期字符串,但这应该是正确的ISO8601格式,并且再次 - 它直接插入JS文件时确实有效。此外,json.php文件与JS文件位于同一目录中,因此不应该是一个问题。
过去几天我一直在努力奋斗。有任何想法吗? 提前谢谢。
解
对我有用的是从json.php文件中删除“pre”标签,并添加标题:
header("Content-type:application/json");
除此之外,json.php文件与请求它的JS文件位于同一文件夹中,但显然FullCalendar在项目的根目录中查找该文件。
感谢ADyson的帮助!