使用Spring MVC的JQuery完整日历..无法将日历数据发送到控制器

时间:2012-04-15 11:32:52

标签: jquery json spring-mvc fullcalendar freemarker

我正在尝试使用JQuery Full Calendar以及Spring MVC + Freemarker。

我做了一个类似that的演示。

目标:我需要将我刚刚提交给控制器的日历数据发送到处理器。

问题:当我将数据发送到控制器时,我在控制器上收到的字符串参数有“undefined = undefined”!!

Freemarker的:

[#ftl /]
<script type="text/javascript">
    var calendar;
    var calendarData;
    function sendDataViaAjax() {
         $.ajax(
            {
              url:"[@spring.url '/vacation/setVacation'/]",
              type: "POST",
              data: calendarData,
              dataType: "json",
              contentType: "application/json"
            } );
    }


    $(document).ready(function() {
        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        $.getJSON('[@spring.url '/vacation/getVacation'/]', function (data) {
            calendar = $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,agendaWeek,agendaDay'
                },
                selectable: true,
                selectHelper: true,
                select: function(start, end, allDay) {
                    var title = prompt('Event Title:');
                    if (title) {
                        calendar.fullCalendar('renderEvent',
                        {
                            title: title,
                            start: start,
                            end: end,
                            allDay: allDay
                        },
                                true // make the event "stick"
                                );
                    }
                    calendar.fullCalendar('unselect');
                },
                editable: true,
                events:[data]
            });
          calendarData=data;
        });
    });


</script>
<style type='text/css'>


    body {
        margin-top: 40px;
        text-align: center;
        font-size: 14px;
        font-family: "Lucida Grande", Helvetica, Arial, Verdana, sans-serif;
    }

    #calendar {
        width: 900px;
        margin: 0 auto;
    }

</style>
<body>
<div id='calendar'></div>

<button value="Test" onclick="sendDataViaAjax()"
</body>

Java控制器,其String参数显示为“undefined = undefined”:

 @RequestMapping(value = "/vacation/setVacation", method = RequestMethod.POST)
      public
      @ResponseBody
      String setVacation( @RequestBody String  response) {

       //Rest of code
      }

我已经改变了我的freemarker,如下所示:

<script type="text/javascript">
    var calendar;
    var calendarData;

    function doAjax() {
        var test = JSON.stringify(calendarData);

        $.ajax(
        {
            url:"[@spring.url '/vacation/setVacation'/]",
            type: "POST",
            data :test ,
            dataType: "json",
            contentType: "application/json"
        });
    }


    $(document).ready(function() {
        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        $.getJSON('[@spring.url '/vacation/getVacation'/]', function (data) {
            calendar = $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,agendaWeek,agendaDay'
                },
                selectable: true,
                selectHelper: true,
                select: function(start, end, allDay) {
                    var title = prompt('Event Title:');
                    if (title) {
                        calendar.fullCalendar('renderEvent',
                        {
                            title: title,
                            start: start,
                            end: end,
                            allDay: allDay
                        },
                                true // make the event "stick"
                                );
                    }
                    calendar.fullCalendar('unselect');
                },
                editable: true,
                events:[data]   //To allow Calendar to render data ,I use events:data instead
            });
            calendarData = data;
        });
    });


</script>

通过这种方式,我可以将json String发布到控制器,从那里我可以继续我需要的东西。 是什么让我感到害怕,现在日历在没有我初始化时传递的事件时呈现为空。 但是,为了呈现日历数据,我进行了一些小改动,如上面的评论所述。 通过这种方式,每当我尝试发布json String时,我都会收到以下错误:“Uncaught TypeError:将循环结构转换为JSON”。 我做了很多试验,但我仍然有上述问题!! 任何人都知道那里发生了什么!!

1 个答案:

答案 0 :(得分:0)

我能想到的一些可以帮助你解决的事情是

  1. 请查看警报或firebug,变量“calendar”的值是多少。这是你期望的价值。
  2. 而不是ajax POST,您可以尝试REST模式“PUT”的其他选项,并在控制器中更改相同的选项。
  3. 您可以尝试使用RequestParam注释和RequestBody。