我有一个案例需要在日历上显示多个eventSource,但在运行时才知道源的数量。我已经创建了一个javascript函数,其中包含对PHP脚本的AJAX调用以创建有效的JSON提要(使用在线工具验证),并且我试图将该JSON数据放入日历的初始化中。我已经使用FullCalendar 1.6.4和2.0.0尝试过它并且它不会显示任何事件或抛出任何错误。奇怪的是我可以将JSON提要的字符串化版本复制到eventSources中并且它可以工作。有任何想法吗?
这是字符串化的JSON数据:
[
{
"url": "/s/events.php?e=7",
"type": "GET",
"color": "#ffcc00",
"textColor": "#000000"
},
{
"url": "/s/events.php?e=59",
"type": "GET",
"color": "#ff6600",
"textColor": "#ffffff"
}
]
使用JSON数据继承FullCalendar初始化代码(dataSources未进行字符串化):
function loadCal(dataSources) {
$('#calendar').fullCalendar({
eventSources: [
dataSources // Here's the JSON data
],
editable: true,
...
}
我尝试过使用字符串版本的dataSources,导致网址无法使用(例如,test.com / [%7B%22url%22:%20%22 / s / events.php?e = 7%22,%22type%22:%20%22GET%22%22color%22:%20%22)
我对其他方法的建议持开放态度。感谢。
这是我按照Bhutto的建议更新的代码:
function loadCal() {
$('#calendar').fullCalendar({
eventSources: [
function() {
var userData = $.ajax( {
url: '/s/calendar_userdata.php',
method: 'GET',
dataType: 'json',
success: function(userData) {
//console.log(userData);
var user_count = userData.length;
var source = [];
var jsonData = [];
// Create the sources
for (var i = 0; i < user_count; i++)
{
var uid = userData[i].uid;
if(!source[i]) source[i] = [];
source[i] = '/s/events.php?e=' + uid;
// Add each source to a JSON feed object
jsonData.push({
url: source[i],
type: 'GET',
color: userData[i].cal_color,
textColor: userData[i].txt_color,
error: function() { alert('There was an error loading calendar data.');}
});
}
console.log(jsonData); // In the console I can see well formed JSON data
return jsonData;
}
});
}
],
editable: true,