我正在将FullCalendar集成到Web表单中。
FullCalendar从隐藏的表单字段中获取数据。像这样:
var data = jQuery.parseJSON(jQuery('#fullcalendar_data').val());
然后FullCalendar很棒,让用户编辑。
用户完成后,点击表单上的“保存”。
如何将FullCalendar的事件数据作为JSON返回到隐藏的表单字段中,以便“保存”将其发回服务器?
答案 0 :(得分:5)
使用此代码从日历中获取事件:
<script type='text/javascript'>
function savedata(){
$(document).ready(function () {
$(function () {
$("#save").click(function () {
var eventsFromCalendar = $('#calendar').fullCalendar('clientEvents');
alert(eventsFromCalendar);
$.ajax(
{
url: '@Url.Action("Save")',
type: 'POST',
traditional: true,
data: { eventsJson: JSON.stringify(eventsFromCalendar) },
dataType: "json",
success: function (response) {
alert(response);
},
error: function (xhr) {
debugger;
alert(xhr);
}
});
});
});
});
}
</script>
并使控制器方法接收如下数据:
[HttpPost]
public ActionResult Save(string eventsJson)
{
var events = JsonConvert.DeserializeObject<IEnumerable<Event>>(eventsJson);
return View();
}
public class Event
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
你可以在你的页面上的任何事件上调用这个java脚本函数,就像onclick一样,使它成为一个函数等。
答案 1 :(得分:2)
@ppumkin不能正常工作,因为它作为对象提交给服务器端,你需要将它串起来
var eventsFromCalendar = $('#calendar')。fullCalendar('clientEvents');
var eventsForCookie = [];
$.each(eventsFromCalendar, function(index,value) {
var event = new Object();
event.id = value.id;
event.start = value.start;
event.end = value.end;
event.title = value.title;
event.allDay = value.allDay
eventsForCookie.push(event);
});
$("#all_events").val(JSON.stringify(eventsForCookie));
之后,您可以将它提交到您可以使用JSON.parse(Ruby)解析的服务器
答案 2 :(得分:1)
获取整个反馈的最佳方法是使用clientEvents
.fullCalendar( 'clientEvents')
http://arshaw.com/fullcalendar/docs/event_data/clientEvents/
根据您获取和发送数据的方式,我认为您可能希望执行类似
的操作$('#fullcalendar_data').val($('FullCalendarObject').fullCalendar('clientEvents'));
然后将其提交给服务器并处理其余部分。
答案 3 :(得分:1)
正如其他人所说,使用
.fullCalendar( 'clientEvents' [, idOrFilter ] ) -> Array
来源:http://fullcalendar.io/docs/event_data/clientEvents/
用法示例:
客户端
$('#submitchange').click(function() {
var clientevents = $('#calendar').fullCalendar('clientEvents');
$.ajax({
url: '/eventupdate',
type: 'POST',
data: {clientdata: JSON.stringify(clientevents)},
success: function (response) {
//get the response from server and process it
$("#calendarupdated").append(response);
}
});
});
服务器端(Python Flask示例):
@app.route('/eventupdate',methods=['POST'])
def eventupdate():
client_ev = request.form.get('clientdata')
#convert the json strings into list of event objects
cev_list = json.loads(client_ev)
#do whatever you need here to update the database,etc
return 'Calendar has been updated'
答案 4 :(得分:1)
这个问题的答案几乎是正确的。这个问题本身已经过时了,所以这可能就是为什么这些问题不再适用了。
对于将来有疑问的任何人,我会发布我的解决方案。我的解决方案是jahanzaib的答案的组合,以及该代码中stringify错误的修复。
function savedata() {
$(document).ready(function () {
$(function () {
$("#save").click(function () {
var eventsFromCalendar = $('#calendar').fullCalendar('clientEvents', function (e) {
return true;
}
return false;
});
for (var i = 0; i < eventsFromCalendar.length; i++)
{
if (eventsFromCalendar[i].borderColor == 'red')
{
$('#errorMsg').show();
return;
}
}
alert(eventsFromCalendar);
$.ajax
({
url: '@Url.Action("Save")',
type: 'POST',
traditional: true,
data: {
eventsJson: JSON.stringify(eventsFromCalendar.map(function (e)
{
return {
start: e.start,
end: e.end,
title: e.title,
}
}))
},
dataType: "json",
success: function (response) {
alert(response);
},
error: function (xhr) {
debugger;
alert(xhr);
}
});
});
});
});
}
答案 5 :(得分:0)
您可以使用Client Events方法。看起来这将返回一个对象数组,然后您可以将它们转换为您想要的任何形式。
答案 6 :(得分:0)
我使用的是4以上的fullcalendar版本,我找不到真正更好的方法来解决-这是一个非常肮脏的解决方法-但在这里是:
document.getElementById('eventData').value = JSON.stringify(calendar.getEventSources()[0]['internalEventSource']['meta']);
document.getElementById("event").submit();
我正在使用django,我只是将值设置为输入并提交表单。
<form action="" id="event" method="post">
<input type="text" name="eventData" style="display:none;" id="eventData"> </form>
谢谢你们。