2011-04-01 29 views
10

這裏是我的Ajax調用:我如何通過一個數組來一個Spring控制器的方法使用jQuery阿賈克斯

$.ajax({ 
    type: 'GET', 
    url: contextPath + '/test/location', 
    data: {'objectValues': object.objectValues }, 
    datatype: 'json', 
    success: function(data) { 
    var obj = jQuery.parseJSON(data); 
    } 
    }); 

它給了我這個網址:

的http://本地主機:8080 /測試/位置?objectValues [] = 1234567890個& objectValues [] = 0987654321

我的春天方法簽名如下所示:

@RequestMapping(value = "/location", method=RequestMethod.GET) 
    public @ResponseBody String loadLocation(@RequestParam(value="objectValues", required=false) String[] objectValues) 

爲什麼我一直對objectValues的值爲空?

+0

檢查此鏈接可否幫助您http://stackoverflow.com/questions/17560258/pass-array-data-from-javascript-in-browser-to-spring-mvc-controller-using-ajax/36174953# 36174953 – 2016-03-23 10:05:26

回答

0

嘗試將您的ajaxSettings設置爲傳統。

jQuery.ajaxSettings.traditional = true; 
+0

這並沒有改變任何東西。 – coder 2011-04-01 18:10:42

+0

如果將其設置爲false,該怎麼辦? – Patricia 2011-04-01 18:19:21

+0

相同的結果...因爲這是你的建議,我可以假設其他一切都看起來正確嗎? – coder 2011-04-01 18:42:17

16

嘗試的RequestParam註釋值更改爲此:

@RequestParam(value="objectValues[]", required=false) 

如果這個問題解決了,那麼它是由於春節和jQuery,其中jQuery的希望把方括號之間的參數命名不兼容以表明參數是一個數組(我認爲PHP也喜歡這個),但是Spring並不關心。要查看反向嘗試設置Ajax請求字符串的「數據」參數:「objectValues = 1234567890 & objectValues = 0987654321」

+1

或者,您可以在Ajax調用中設置'traditional:true'。 – 2014-08-13 20:24:30

+0

它爲我工作。謝謝。 – 2015-06-23 19:07:58

10

有多種方法可以做到這一點,取決於你認爲哪個部件發送或接收數據格式不正確(或者您有權修改哪個組件)。

如果您認爲jQuery的發送數據是正確的默認方式,適當地修改您的控制器(請注意,您需要對方法簽名和註解同時改變,如果你同時使用):

@RequestMapping(value = "/location", method=RequestMethod.GET, params="objectValues[]") 
public @ResponseBody String loadLocation(@RequestParam(value="objectValues[]", required=false) String[] objectValues) { 
    ... 
} 

如果你正確地相信春天的功能,但是從jQuery的發送的數據是不正確,修改的jQuery:

$.ajax({ 
    traditional: true, 
    ... 
}); 

查看更多關於jQuery AJAX settingstraditional設置。

我自己認爲修改jQuery發送數據的方式會更清晰;它使我的控制器語法看起來像我想要的。