的设置
我使用的是Fullcalendar v4,在extraParams
和通过AJAX将它们发送到服务器时遇到了一些问题。
我想做的(但失败了(是使用这个:
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: ['interaction','dayGrid'],
defaultView: 'dayGridMonth',
selectable: true,
selectMirror:true,
.......
eventSources: [{
url: 'ajax/fc.php?dropdown='+$("#dropdown").val(),
method: 'POST',
cache: false,
extraParams: {
month: $("#monthPicker").val(),
dropdown: $("#dropdown").val(),
person: $("#person").val(),
phone: document.getElementById("phone").value,
testtext: 'hardcoded text'
},
}],
......
});
月份、下拉列表、人员、电话的值是从表格中提取的。
问题
转储GET
和POST
变量(服务器端(,只是为了检查我收到的内容,会为除month
参数之外的所有内容返回0/空字符串-它显示正确。
GET
参数只是用于测试目的,document.getElementById
位也是如此——我想看看如果我使用它们(什么都没有(,是否会显示任何内容。
即使我将代码更改为使用events
而不是eventSources
,问题仍然存在。
经过进一步的实验,日历似乎受到初始化时出现的元素值的影响-如果我对下拉列表、人员和其他输入/选择元素的值进行硬编码,则只发送它们(值的任何更改都将被忽略(。如果我只是设置初始值(即<input id="person" name="person" value="Joe">
(,也会发生同样的情况。
问题
我如何才能强制calendar
(而不是破坏和重新创建它(实际注意到我要用作extraParams
的输入值的变化?
如果我误解了extraParams
的使用,我的替代方案是什么?我需要能够向服务器发送各种数据,以便获得一组特定的事件。
多亏了这个SO答案,才在这段时间内解决了问题。由于参数是动态的,因此需要按照文档中的说明发送参数(动态extraParams
参数部分(:
var calendar = new Calendar(calendarEl, {
events: {
url: '/myfeed.php',
extraParams: function() { // a function that returns an object
return {
dynamic_value: Math.random()
};
}
}
});
在我的情况下,它将变成:
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: ['interaction','dayGrid'],
defaultView: 'dayGridMonth',
selectable: true,
selectMirror:true,
.......
event: {
url: 'ajax/fc.php',
method: 'POST',
cache: false,
extraParams: function() {
return {
month: $("#monthPicker").val(),
dropdown: $("#dropdown").val(),
person: $("#person").val(),
phone: document.getElementById("phone").value,
testtext: 'hardcoded text'
}
},
},
......
});