jQuery.ajax向後臺傳遞數組問題

今天重溫了一個問題,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);
}

觀察瀏覽器中發送的請求,可以發現參數如下:


圖片參數1


可以看到,參數的名字爲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...
    }
});

修改之後重新發出請求,觀察瀏覽器:


請求參數2


這次參數不帶”[]”了,並且後臺可以成功接收到該數組。

發佈了34 篇原創文章 · 獲贊 22 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章