在Ajax数据库更新后重新呈现fullCalendar中的事件

时间:2014-01-18 12:48:36

标签: javascript jquery ajax fullcalendar

我试图让fullCalendar反映通过AJAX对数据库所做的更改。问题是,在成功进行AJAX调用后,它不会在屏幕上更新日历。

$.ajax({
    type: "POST",
    url: "eventEditXHR.php",
    data: {
       //the data
    },
    success: function(text) {
      $("#calendar").fullCalendar("refetchEvents");
    }....

我使用的是错误的方法吗?无需重新加载整个页面,最好的方法是什么?感谢您的任何意见!

8 个答案:

答案 0 :(得分:44)

有几种方法。有些不那么优雅。

1。如果您使用FullCalendar来抓取json事件:

$('#calendar').fullCalendar({ events: "json-events.php",    });

只是做:

$('#calendar').fullCalendar( 'refetchEvents' );

如果您想要外部方法来获取您可以执行的事件。不优雅但会起作用

$('#calendar').fullCalendar( 'removeEventSource', source )
$('#calendar').fullCalendar( 'addEventSource', source )

答案 1 :(得分:44)

您可以分3个步骤渲染事件。

1)删除所有活动

.fullCalendar( 'removeEvents');

2)添加事件源

.fullCalendar( 'addEventSource', events);         

3)渲染事件

.fullCalendar( 'rerenderEvents' );

...一样

$.ajax({
    type: "POST",
    url: "eventEditXHR.php",
    data: {       //the data    },
    success: function(events)
      {
              $('#calendar').fullCalendar('removeEvents');
              $('#calendar').fullCalendar('addEventSource', events);         
              $('#calendar').fullCalendar('rerenderEvents' );
       }.
     });

答案 2 :(得分:3)

这适用于ASP.NET CORE,MVC 6:

 success: function(events)
 {
        $('#calendar').fullCalendar('rerenderEvents');
        $('#calendar').fullCalendar('refetchEvents');
 }

虽然这在ASP.NET MVC 5中起作用:

 success: function(events)
 {
       $('#calendar').fullCalendar('refetchEvents');
 }

答案 3 :(得分:1)

什么对我有用:

success: function(text) {
                setTimeout(function(){
                    $("#calendar").fullCalendar("rerenderEvents");
                },50);
            }

如果我在没有超时的情况下直接执行它,它不起作用,可能是由于$ element.fullCalendar变量尚未完全设置?

答案 4 :(得分:1)

对于FullCalendar v3.8.0,以下内容将起作用:

var events = [
    {title: 'Business Lunch', start: '2017-12-03T13:00:00'},
    {title: 'Meeting', start: '2017-12-13T11:00:00'},
    {title: 'Conference', start: '2017-12-18', end: '2017-12-20'},
];

$('#calendar').fullCalendar({
    defaultDate: '2017-12-12',
    events: function (start, end, tz, callback) {
        callback(events);
    }
});

events.push({title: 'Party', start: '2017-12-29T20:00:00'});
$('#calendar').fullCalendar('refetchEvents');

jsbin

答案 5 :(得分:1)

一行完成工作:

$('#calendar').fullCalendar('refetchEventSources', 'eventEditXHR.php')

延迟回复,但这应该是自2.8.0以来最有效的方式

答案 6 :(得分:0)

 eventDrop: function (event, delta, revertFunc) {
            var id = event.id;
            var start = event.start.format();

            $.ajax({
                url: getURLRoot() + 'Diary/UpdateEventTimestamp',
                type: "POST",
                data: { id: id, start: start },
                success: function () {
                    $('#calendar').fullCalendar('refetchEvents');
                }
            });
        }

答案 7 :(得分:0)

如果您在 ajax 成功函数中调用 refetchevents,它将无法工作,因为我相信它是异步的。但是你可以做的是调用ajax完整函数中的refetchevents。

          $.ajax({
                    type: "POST",
                    url: "/TaxCalendar/CreateEvent",
                    data: JSON.stringify({ jdata: json }),
                    //data: jdata,
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (events) {


                    }, complete: function () {
                        //Call Refetch function here.
                        $('#calendar').fullCalendar('refetchEvents');
                    }
                });