2012-03-21 62 views
25

即时通讯尝试使用jquery fullcalendar。事件数据来自使用JSON的服务器。 我的页面有一个下拉元素和fullcalendar div。jquery fullcalendar发送自定义参数和JSON刷新日历

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

这里是我的代码

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

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

    }); 

然而以上不工作的代码。 有什么帮助吗?

+1

是什么/ myfeed见/吗?我认为它接收查询字符串值“personId”并执行查找以返回json源? refetchEvents应该这样做(根据doco),但也许你还需要调用'rerenderEvents'。您是否完成了一项跟踪(例如,如果您使用的是Windows上的Fiddler)来捕获发布/返回的数据? – frumbert 2012-03-21 08:52:02

回答

26

试试这个:

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

}); 
+0

这是解决方案。根据fullcalendar http://fullcalendar.io/docs/event_data/events_json_feed/的文档中的'动态数据参数'部分 – inye 2015-04-14 22:38:03

0

我无法让它工作。 所以我结束了类似这样的解决方案:

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

    }); 
30

最后,用下面的代码工作:

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

感谢队友。标记为答案。 – 2013-07-16 14:29:17

+0

也适用于我:) – Paulj 2014-08-14 17:25:46

+0

我测试过所有的解决方案,只有你的工作 – Eagle 2015-03-18 14:09:19

3

我刷新这种方式后一个Ajax事件增加了例如使用模态的事件:

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

不适用于我。 $( “#overviewDatePicker”)日期选择器( { ONSELECT:功能(事件){ \t变种开始= $( “#overviewDatePicker”)VAL(); \t VAR端= “2016年10月21日”。 \t $阿贾克斯({ \t \t网址: “fullcalendar /演示/ PHP/GET-events.php模式= customdate&开始=?” +启动+ “&结束=” +年底, \t \t类型: “GET”, \t \t成功:功能(结果){ \t \t \t console.log(result); \t \t \t $('#calendar')。fullCalendar('removeEvents'); \t \t \t $('#calendar')。fullCalendar('addEventSource',result); \t \t \t $('#calendar')。fullCalendar('rerenderEvents'); \t \t \t \t \t} \t}); }, }); – 2016-10-26 12:05:43

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(); 
{ 
2

的问题是,你正在改变下拉的价值已创建的事件对象,其中有下拉的原始值的副本。以下是你需要的东西:

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

这依赖于它可以从下拉的onchange和fullcalendar初始化(如文件的onload)

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'); 
}, 
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"); 
}); 
+0

这对我来说非常合适。至少让我走上正确的轨道,让我的日历算出来。谢谢! – 2015-11-19 03:26:57

+0

不适用于我。 $( “#overviewDatePicker”)日期选择器( { ONSELECT:功能(事件){ \t变种开始= $( “#overviewDatePicker”)VAL(); \t VAR端= “2016年10月21日”。 \t $阿贾克斯({ \t \t网址: “fullcalendar /演示/ PHP/GET-events.php模式= customdate&开始=?” +启动+ “&结束=” +年底, \t \t类型: “GET”, \t \t成功:功能(结果){ \t \t \t console.log(result); \t \t \t $('#calendar')。fullCalendar('removeEvents'); \t \t \t $('#calendar')。fullCalendar('addEventSource',result); \t \t \t $('#calendar')。fullCalendar('rerenderEvents'); \t \t \t \t \t} \t}); }, }); – 2016-10-26 12:05:09

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'); 
     }); 

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