How can I load all events on calendar using Ajax?

后端 未结 4 1778
囚心锁ツ
囚心锁ツ 2021-02-01 08:39

I want to load all events on FullCalendar using AJAX when I clicked next-previous-button in agenda-views.

I guess, when will click on

4条回答
  •  孤城傲影
    2021-02-01 09:27

    From the FullCalendar Online Documentation

    FullCalendar will call this function whenever it needs new event data. This is triggered when the user clicks prev/next or switches views.

    This function will be given start and end parameters, which are Moments denoting the range the calendar needs events for.

    timezone is a string/boolean describing the calendar's current timezone. It is the exact value of the timezone option.

    It will also be given callback, a function that must be called when the custom event function has generated its events. It is the event function's responsibility to make sure callback is being called with an array of Event Objects.

    Here is an example showing how to use an event function to fetch events from a hypothetical XML feed:

    $('#calendar').fullCalendar({
        events: function(start, end, timezone, callback) {
            $.ajax({
                url: 'myxmlfeed.php',
                dataType: 'xml',
                data: {
                    // our hypothetical feed requires UNIX timestamps
                    start: start.unix(),
                    end: end.unix()
                },
                success: function(doc) {
                    var events = [];
                    $(doc).find('event').each(function() {
                        events.push({
                            title: $(this).attr('title'),
                            start: $(this).attr('start') // will be parsed
                        });
                    });
                    callback(events);
                }
            });
        }
    });
    

    Source


    I made some little changes:

    $('#calendar').fullCalendar({
        events: function(start, end, timezone, callback) {
            jQuery.ajax({
                url: 'schedule.php/load',
                type: 'POST',
                dataType: 'json',
                data: {
                    start: start.format(),
                    end: end.format()
                },
                success: function(doc) {
                    var events = [];
                    if(!!doc.result){
                        $.map( doc.result, function( r ) {
                            events.push({
                                id: r.id,
                                title: r.title,
                                start: r.date_start,
                                end: r.date_end
                            });
                        });
                    }
                    callback(events);
                }
            });
        }
    });
    

    Notes: start and end MUST be ISO 8601. Another change was the use of format instead of unix (this made easier for me to deal with the code-behind)

提交回复
热议问题