2010-06-01 59 views
0

我有一個請求映射的彈簧控制器如下使用jQuery,我如何將一個字符串數組作爲http參數附加到一個http請求中?

@RequestMapping("/downloadSelected") 
public void downloadSelected(@RequestParam String[] ids) { 
    // retrieve the file and write it to the http response outputstream 
} 

我有對象的HTML表,該表的每一行具有與所述對象作爲值的ID的複選框。當他們提交時,我有一個jQuery回調來序列化所有的ID。我想將這些ID粘貼到名爲「ids」的http請求參數中,以便我可以輕鬆地抓住它們。

我想我可以做到以下幾點

var ids = $("#downloadall").serializeArray(); 

那我就需要採取每一標識,並把它們添加到請求PARAM稱爲IDS。但是,有沒有一種「標準」方式來做到這一點?像使用jQuery?

回答

2

我不知道「標準方式」,但這是我該怎麼做的。

var ids = $("#downloadall").serializeArray(); 

會給你在表格上的數據集(僅呈現選中的項):)剛剛

[{name:"foo1", value:"bar1"}, {name:"foo2", value:"bar2"}] 

爲了養活這對jQuery的阿賈克斯(:

$.ajax({ 
    url: <your url>, 
    data: ids.map(function (i) {return i.name+'='+i.value;}).join('&') 
}); 

的陣列.map()與所有瀏覽器都不兼容,因此您最好在自己的網頁上也有此代碼:

if (!Array.prototype.map) { 
    Array.prototype.map = function(fun /*, thisp*/) { 
    var len = this.length >>> 0; 
    if (typeof fun != "function") 
     throw new TypeError(); 

    var res = new Array(len); 
    var thisp = arguments[1]; 
    for (var i = 0; i < len; i++) { 
     if (i in this) 
     res[i] = fun.call(thisp, this[i], i, this); 
    } 
    return res; 
    }; 
} 

這段代碼片段是我從mozilla developer center得到的。

我沒有把它們放在?ids=...參數中,但是這樣它們很容易在服務器端訪問。您始終可以修改地圖功能以適應您的需求。

+1

或者,只需使用jQuery地圖功能:http://api.jquery.com/jQuery.map/ – jvenema 2010-06-01 16:30:49

+0

是的,這也是一個好主意!我喜歡jQuery,他們似乎總是有你需要的:) – MyGGaN 2010-06-02 22:46:17

相關問題