2012-04-15 107 views
1

我想使用JQuery完整日曆以及Spring MVC + Freemarker。JQuery完整日曆與Spring MVC ..不能發送日曆數據到控制器

我做了一個演示,如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的控制器,其字符串參數來爲 「不確定=不確定」:

@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字符串到控制器,從那裏我可以繼續我需要的東西。 現在,日曆呈現爲空而沒有我在初始化時傳遞的事件,這讓我非常吃驚。 但是,爲了呈現日曆數據,我做了一些小的更改,如上面的註釋中所述。 通過這種方式,每當我嘗試發佈json字符串時,出現以下錯誤:「Uncaught TypeError:將圓形結構轉換爲JSON」。 我做了很多試驗,但我仍然有提到的問題! 任何人都有一個關於那裏發生了什麼的想法!

回答

0

一些,我能想到的東西幫您解決是

  1. 請提醒或螢火蟲的是,什麼是變量「日曆」的值進行檢查。這是你所期待的價值嗎?
  2. 而不是ajax POST,您可以嘗試REST模式「PUT」的其他選項,並在控制器中更改相同的選項。
  3. 您可以嘗試使用RequestParam註釋以及RequestBody。
+0

感謝您的回覆。我試過了。 1-「日曆」的值未定義。 2 - 當我使用PUT時,我得到了相同的結果。這裏我需要發送該日曆對象到控制器的問題。問題是爲什麼「日曆」變量未定義,雖然它是一個全局變量! – Echo 2012-04-15 13:24:26

+0

任何建議! – Echo 2012-04-15 13:25:40

+0

我看到了演示頁面的html。你能否在html代碼之後嘗試移動腳本部分。我認爲腳本在頁面呈現之前得到執行。它只是一個嘗試。 – raddykrish 2012-04-15 13:44:19