我有一个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();
答案 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");
这将创建一个字符串:'{"ids": [1,2,3,4]}'
并将其发送到服务器。
你的问题似乎有一个错字:
$.post('/save', {ids: selections, function(data) {
应该是:
$.post('/save', {ids: selections}, function(data) {
答案 2 :(得分:1)
也许你需要的是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]