FullCalendar和多个动态事件源

时间:2014-04-14 02:55:43

标签: javascript jquery ajax fullcalendar

我有FullCalendar(1.6.4)使用单个JSON提要(单个用户的日历)。现在,我想增强功能,以便日历显示多个用户日历(管理员及其子帐户日历)。在调用日历之前,我不知道将调用多少个用户日历。所以,我有一个Ajax函数调用PHP脚本,该脚本返回管理员帐户的所有用户ID的JSON提要。

$(document).ready(getUsers);

function getUsers() {
    var data = $.ajax( {
        url: '/s/calendar_userdata.php',
        method: 'GET',
        dataType: 'json',
        success: function(userData) {
            var user_count = userData.length;
            var uid_array = [];

            // Create the sources
            for (var i = 0; i < user_count; i++)
            {
                var uid = userData[i].uid;
                if(!uid_array[i]) uid_array[i] = [];
                uid_array[i] = uid;
            }
        }
    });
    loadCal();
}

Ajax调用有效。正如预期的那样,我得到了一个像[7,47]这样的数组(uid_array)。我想在我的loadCal函数中使用这个数组,如下图所示,但是在getUsers函数结束后我无法保持它。

function loadCal() {
    $('#calendar').fullCalendar({
        eventSources: [
        {
            url: '/s/events.php',
            type: 'GET',
            data:
            {
                uid: uid_array
            }
        }
        ],
        editable: true,
        .........

我试过了: 1)通过最初在没有“var”的getUsers之外定义uid_array来创建全局变量。 2)设置“window.uid_array = uid_array;”在getUsers函数中。 3)添加“return uid_array;”在getUsers函数的末尾。 4)在getUsers函数的末尾添加一个闭包。但是,我没有把握得太好,不能相信我做得对。

我有两个问题: 1)如何在getUsers之外使数组(uid_array)可用? 2)数组需要采用何种格式才能使fullCalendar识别并使用它?

我已经坚持了一段时间。非常感谢。

1 个答案:

答案 0 :(得分:0)

我认为如果您更改loadCal功能的位置,则可以实现目标:

function getUsers() {
    var data = $.ajax( {
        url: '/s/calendar_userdata.php',
        method: 'GET',
        dataType: 'json',
        success: function(userData) {
            var user_count = userData.length;
            var uid_array = [];

            // Create the sources
            for (var i = 0; i < user_count; i++)
            {
                var uid = userData[i].uid;
                if(!uid_array[i]) uid_array[i] = [];
                uid_array[i] = uid;
            }
            //CALL loadCal FROM HERE
            loadCal(uid_array);
        }
    });
}

修改loadCal以接受uids数组:

function loadCal(uidArray) {
$('#calendar').fullCalendar({
    eventSources: [
    {
        url: '/s/events.php',
        type: 'GET',
        data:
        {
            uid: uidArray
        }
    }
    ],
    editable: true,

当您在ajax中进行getUsers来电时,系统不会返回该号码,并且会调用loadCal。因此,您需要确保仅在success回调中返回ajax后才调用它。