使用JSON数据将fullcalendar动态加载到addEventSource中

时间:2013-08-29 12:21:36

标签: jquery ajax json fullcalendar

实际上标题告诉了一切。我做一个ajax调用,它返回一个事件列表。然后我想把列表放到fullcalendar中。此操作应该适用于每个更改的选定用户名。

$.ajax({
    type: "POST",
    url: "get_event_list.php",
    data: "username="+user,
    success: function(ajaxCevap) {

        var obj = jQuery.parseJSON(ajaxCevap);
        var events = new Array();

        $.each(obj,function(index,value) {

            event = new Object();       
            event.title = value['title']; 
            event.start = value['start']; 
            event.end = value['end'];
            event.color = value['backgroundColor'];
            event.allDay = false;

            events.push(event);
        });

        $('#calendar').fullCalendar("removeEvents");        
        $('#calendar').fullCalendar('addEventSource', events);      
        $('#calendar').fullCalendar('refetchEvents');

    }
});

addEventSource无效。没有任何附加到fullcalendar。

这是容器:<div id="calendar"></div>

---编辑---

我收到错误:Uncaught exception: TypeError: Cannot convert 'getDaySegmentContainer()' to object

3 个答案:

答案 0 :(得分:2)

我使用了fullcalendar文档建议的样式: http://arshaw.com/fullcalendar/docs/event_data/Event_Source_Object/

因此,如果你像我一样使用rails,我在我的文档就绪脚本中有这个:

eventSources: [{
    url: '/mymodel.json',
    ignoreTimezone: false
}],

然后在模型中:

def index
#gets list

@mymodel = Mymodel.all.map { |r| {:title => r.title , :start => r.date, :color => '#66FF33', :end => r.enddate, :id => r.id} } 

 respond_to do |format|
    format.html
    format.json { render :json => @mymodel }
 end
end

答案 1 :(得分:0)

看看我的回答,我遇到了同样的问题,我无法将事件映射到jquery fullcalender。经过三天的奋斗后,它得以运作。

这是链接

  

Maping Events to FullCalender using JSON

答案 2 :(得分:0)

我曾经做过类似的事情,但是使用了“月份”#39;值仅获取所选月份的事件并替换日历中的所有事件

我的javascript代码:

  $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: ''
        },
        editable: false,
        events: function (start, end, timezone, callback) {


            var d = new Date();
            var n = d.getMonth();

            var month = n + 1; //actual month 
            try {
                //if the View is diferent of today , get the number of month from the actual view
                month = parseInt($('#calendar').fullCalendar('getDate').format("MM"));
            }catch(e){}

            $.ajax({
                url: $("#url-events").val(), //GetEventsByMonth
                dataType: 'json',
                data: {
                    //pass the parameter to get the events by month
                    month: month
                },
                success: function (result) {
                    var events = [];
                    $.each(result, function (i, item) {

                        events.push({
                            title: result[i].title,
                            start: result[i].start,// will be parsed
                            end: result[i].end // will be parsed
                        });
                    })                        
                    callback(events);
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert(xhr.status);
                    alert(thrownError);

                }


            });
        }

    });

我的行动方法:

 public ActionResult GetEventsByMonth(int month)
    {

        List<Events> list = Events.GetEvents(month);
        var rows = list.ToArray();
        return Json(rows, JsonRequestBehavior.AllowGet);
    }

您可以更改“月份”&#39;参数由&#39;用户&#39;并向他们提供相应用户的所有活动。

我的模特:

 public class Events
{
    public string id { get; set; }
    public string title { get; set; }
    public string date { get; set; }
    public string start { get; set; }
    public string end { get; set; }
    public string url { get; set; }

    public bool allDay { get; set; }


    public static List<Events> GetEvents(int month= 0)
    {
      ...
    }


}