在jQuery AJAX POST中将数组项作为多个参数传递

时间:2011-11-08 17:20:28

标签: jquery

我有一个id的数组,我希望通过jQuery的$ .post作为参数传递给web服务,如下所示:

var selections = [1,2,3,4];

$.post('/save', {ids: selections, function(data) {
    // do something
});

不幸的是,上面的代码提交了多个参数(这就是我想要的)但是它会在参数名称后附加一个'[]',以便在使用firebug进行检查时发送的params如下所示:

ids[] 1
ids[] 2
ids[] 3
ids[] 4

数组的大小是动态的,所以我无法对其进行硬编码。有没有动态的方法来执行此操作而无需手动创建参数字符串?

谢谢,   gearoid。

修改

我还应该提一下,我正在提交泽西网络服务方法,如下所示:

@POST 
@Path("save")
@Produces({"application/xml","application/json"})
@Consumes("application/x-www-form-urlencoded")
public Response save();

5 个答案:

答案 0 :(得分:1)

以下是使用jQuery动态创建参数字符串的示例:http://jsfiddle.net/rre47/4/

var arr = {'ids' : []};//create new object (empty)

基本思想是在'ids'键下创建一个带有数组的对象。然后遍历您的数据以将数据附加到此数组:

arr.ids.push(<some value>);

然后输出参数字符串:

decodeURIComponent($.param(arr));

答案 1 :(得分:1)

使用JSON编码:

var selections = [1,2,3,4];
$.post('/save', {ids: selections}, function(data) {
    // do something
},
"json");

来自jQuery's post

这将创建一个字符串:'{"ids": [1,2,3,4]}'并将其发送到服务器。

你的问题似乎有一个错字:

$.post('/save', {ids: selections, function(data) {

应该是:

$.post('/save', {ids: selections}, function(data) {

答案 2 :(得分:1)

也许你需要的是jQuery函数$.param()

http://api.jquery.com/jQuery.param/

答案 3 :(得分:1)

使用传统的AKA“浅层”序列化,如http://api.jquery.com/jQuery.param/所述。

第一个“级别”的结果将没有括号。

$.ajax({
    url : '/save',
    data : {
        ids: selections
    },
    traditional : true
});

答案 4 :(得分:0)

我只是使用Array方法.join从数组中创建一个字符串,然后使用PHP的explode函数将其转换回数组:

JS:

var selectionsString = selections.join('|'); //returns '1|2|3|4'

$.post('/save', {ids: selectionsString, function(data) {
    // do something
});

PHP:

$selectionsArray = explode('|', $_POST['ids']); //returns [1,2,3,4]