Je souhaite charger tous les événements sur FullCalendar en utilisant AJAX lorsque j'ai cliqué sur bouton suivant/précédent dans agenda-views
.
Je suppose que, quand cliquera sur le bouton next-previous-button alors j'enverrai le date('y-m-d')
actuel au url: 'fetch-events.php'
puis il retournera les données au format event{ id: ,title: , start: , end: , allDay: }
pour le rendu dans le calendrier
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
selectable: false,
selectHelper: false,
editable: false,
events: // on-click next-previous button load events using Ajax
// post date using Ajax, then query to fetch all events and return data
});
JSON ne fonctionne pas dans mon cas
Frank, vous avez la réponse au document en ligne de FullCalendar: http://arshaw.com/fullcalendar/docs/event_data/events_function/
De la documentation en ligne FullCalendar
FullCalendar appellera cette fonction chaque fois qu'elle aura besoin de nouvelles données d'événement . Ceci est déclenché lorsque l'utilisateur clique sur prev/next ou change de vue.
Cette fonction recevra les paramètres start et end, qui sont Moments indiquant la plage pour laquelle le calendrier a besoin d'événements.
timezone est une chaîne/boolean décrivant le courant .__ du calendrier. fuseau horaire. C'est la valeur exacte de l'option timezone .
On lui donnera également callback, une fonction qui doit être appelée quand la fonction d'événement personnalisé a généré ses événements. C'est l'événement La fonction est responsable de s'assurer que callback est appelé avec un tableau de Objets d'événement .
Voici un exemple montrant comment utiliser une fonction d’événement pour extraire événements d'un flux XML hypothétique:
$('#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);
}
});
}
});
J'ai fait quelques petits changements:
$('#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
et end
DOIVENT être ISO 8601 . Un autre changement est l'utilisation de format
au lieu de unix
(cela m'a facilité la gestion du code-behind).
This is perfect way to load data properly.
// if you want to empty events already in calendar.
$('#calendar').fullCalendar('destroy');
$.ajax({
url: 'ABC.com/Calendar/GetAllCalendar/',
type: 'POST',
async: false,
data: { Id: 1 },
success: function (data) {
obj = JSON.stringify(data);
},
error: function (xhr, err) {
alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
alert("responseText: " + xhr.responseText);
}
});
/* initialize the external events
-----------------------------------------------------------------*/
$('#external-events div.external-event').each(function () {
// create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)
// it doesn't need to have a start or end
var eventObject = {
title: $.trim($(this).text()) // use the element's text as the event title
};
// store the Event Object in the DOM element so we can get to it later
$(this).data('eventObject', eventObject);
// make the event draggable using jQuery UI
$(this).draggable({
zIndex: 999,
revert: true, // will cause the event to go back to its
revertDuration: 0 // original position after the drag
});
});
/* initialize the calendar
-----------------------------------------------------------------*/
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
var calendar = $('#calendar').fullCalendar({
//isRTL: true,
buttonHtml: {
prev: '<i class="ace-icon fa fa-chevron-left"></i>',
next: '<i class="ace-icon fa fa-chevron-right"></i>'
},
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
//obj that we get json result from ajax
events: JSON.parse(obj)
,
editable: true,
selectable: true
});
Hey regarde ma réponse. J'ai fait face au même problème et je l'ai fait fonctionner! Voici le lien