今天重溫了一個問題,jQuery.ajax向后台傳遞一個數組,而在后台接收不到該值
前台js方法部分代碼如下:
//創建一個測試數組 var boxIds = new Array(); boxIds.push(12182); boxIds.push(12183); boxIds.push(12184); //向后台交互 $.ajax({ url: "/xxx", type: "GET", data: { "boxIds": boxIds, "boxType": 0, "time": new Date().getTime() }, success: function(data) { //do sth... } });
后台controller代碼(SpringMVC)
@ResponseBody @RequestMapping(value = "/box/changeLock") public String changeLock(final Long[] boxIds, final int boxType) { return locker_ChangeLockService.changeLock(boxIds, boxType); }
觀察瀏覽器中發送的請求,可以發現參數如下:
可以看到,參數的名字為boxIds[]而不是我們所定義的boxIds,也就是說,當傳遞數組時,會在我們的數組名稱后自動加上”[]”,所以后台接不到。
解決辦法:
設置jQuery.ajax的tradional屬性
$.ajax({ url: "/xxx", type: "GET", data: { "boxIds": boxIds, "boxType": 0, "time": new Date().getTime() }, traditional: true,//這里設置為true success: function(data) { //do sth... } });
修改之后重新發出請求,觀察瀏覽器:
這次參數不帶”[]”了,並且后台可以成功接收到該數組。