jquery fullcalendar使用JSON发送自定义参数和刷新日历

时间:2012-03-21 08:38:35

标签: jquery json fullcalendar

我试图使用jquery fullcalendar。事件数据来自使用JSON的服务器。 我的页面有一个下拉元素和fullcalendar div。

我需要的是每次用户更改下拉列表时刷新日历。下拉列表的选定值应发布到服务器以获取新的事件数据

这是我的代码

     $(document).ready(function() {
        $('#calendar').fullCalendar({
            events: {
                url : '/myfeed',
                data : {personId : $('#personDropDown').val() }
            }
        });

        $('#personDropDown').change(function(){
            $('#calendar').fullCalendar('refetchEvents');
        });

    });

上面的代码不起作用。 有什么帮助吗?

11 个答案:

答案 0 :(得分:31)

最后,它使用了以下代码:

$(document).ready(function() {
        loadCalendar();
        $('#siteSelect').change(function(){
            var selectedSite = $('#siteSelect').val();
            var events = {
                  url: '/myfeed2',
                  type: 'POST',
                  data: {
                    siteid: selectedSite
                  }
            }
            $('#calendar').fullCalendar('removeEventSource', events);
            $('#calendar').fullCalendar('addEventSource', events);
        });

    });

答案 1 :(得分:31)

试试这个:

$(document).ready(function () {
    $('#calendar').fullCalendar({
        events: {
            url: '/myfeed',
            data: function () { // a function that returns an object
                return {
                    personId: $('#personDropDown').val(),
                };

            }
        });


    $('#personDropDown').change(function () {
        $('#calendar').fullCalendar('refetchEvents');
    });

});

答案 2 :(得分:3)

在ajax事件使用模态添加事件后,我以这种方式刷新:

$('#cal').fullCalendar('removeEvents');
$('#cal').fullCalendar('addEventSource', "../calendar/json-events2.php")
$('#cal').fullCalendar('rerenderEvents');

答案 3 :(得分:3)

这至少适用于2.0.2。 data成为一个返回填充了动态下拉值的对象的函数。添加change以在选择新的下拉列值时刷新日历。

$("#calendar").fullCalendar({
    events: {
        url: "/myfeed",
        data: function() {
            return {
                dynamicValue: $("#dropdownList").val()
            };
        },
        type: "POST"
    }
});

$("#dropdownList").change(function () {
    $("#calendar").fullCalendar("refetchEvents");
});

答案 4 :(得分:2)

问题是您在创建事件对象后更改下拉列表的值,该事件对象具有下拉列表原始值的副本。您需要以下内容:

$('#dropdownId').change(function () {
    events.data.customParam = $(this).val();
    $('#calendar').fullCalendar('refetchEvents');
});

这依赖于在一个区域中创建的事件对象,可以从下拉列表和fullcalendar初始化(例如文档onload)访问它。

答案 5 :(得分:1)

我这样解决了

         data: function() { // a function that returns an object
         return {
                 custom_param1: date_start,
             custom_param2: date_end
            };
         },

修改值date_start和date_end后,此函数获取新值。 在我的情况下,我采取视图更改的日期

viewRender: function(view,element){
       date_start = $.fullCalendar.formatDate(view.start,'dd/MM/yyyy');
       date_end   = $.fullCalendar.formatDate(view.end,'dd/MM/yyyy');
},

答案 6 :(得分:0)

我也无法做到这一点。 所以我最终得到了类似的解决方案:

$('#personDropDown').change(function () {
            var source = {
                data: {
                    filter: $('#personDropDown').val()
                },
                 url : '/myfeed'
            };
            $('#calendar').fullCalendar('removeEvents');
            $('#calendar').fullCalendar('addEventSource', source);
        });

答案 7 :(得分:0)

这可以通过使用函数作为事件源来实现。在refetchEvents事件中,fullCalendar调用返回自定义值的函数,并将其发布到服务。

$(document).ready(function() {
        $('#valueSelect').change(function(){
            if ($('#calendar').hasClass('fc'))
            {
                $('#calendar').fullCalendar('refetchEvents');
            }
            else
            {
                $('#calendar').fullCalendar({
                    events: function(start, end, callback) {
                        $.ajax({
                            url: 'web-service-link',
                            type: 'GET',
                            dataType: "json",
                            contentType: "application/json; charset=utf-8",
                            data: {
                                start: Math.round(start.getTime() / 1000),
                                end: Math.round(end.getTime() / 1000),
                                customValue: GetCustomValue()
                            }
                        });
                    }
                });
            }
        });
});

function GetCustomValue()
{
    return $('#valueSelect').val();
{

答案 8 :(得分:0)

我自己也遇到了这种情况,并且有一种更动态的方法,因为在初始化日历并且数据对象需要修改时存储了值。

 $(document).ready(function() {
        $('#calendar').fullCalendar({
            events: {
                url : '/myfeed',
                data : {personId : $('#personDropDown').val() }
            }
        });

        $('#personDropDown').change(function(){
            $('#calendar').data('fullCalendar').options.events.data.personId = $(this).val();
            $('#calendar').fullCalendar('refetchEvents');
        });

    });

答案 9 :(得分:0)

This is right way.

$.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 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    
});

答案 10 :(得分:0)

我是用它做的:

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

当我在下拉列表中选择其他选项时,我不知道它是否优雅但是有效!