【发布时间】:2014-07-08 13:06:44
【问题描述】:
我想在 ajax 调用中传递 javascript 对象数组。
我是这样制作数组的:
var itemsToEdit = [];
$(".editedItem[value='true']").closest("tr").each(function() {
var itemToEdit = {
id: $(this).find(".idInput").val(),
name: $(this).find(".nameInput").val(),
code: $(this).find(".codeInput").val()
}; // Represents SomeClass java class with fields: id, name, code
itemsToEdit.push(itemToEdit);
});
然后做ajax调用:
$.ajax({
url: "MyActionBean.action?saveChanges",
type: "Post",
dataType: "json",
data: itemsToEdit,
success: function( data ) {
alert("Oh, no");
}
});
问题是:在服务器端我收到地图列表,而不是 SomeClass 对象列表。 我检查了浏览器发送的内容,它是:
itemsToEdit[0][id]:4
itemsToEdit[0][name]:Florida
itemsToEdit[0][code]:FL
itemsToEdit[1][id]:3
itemsToEdit[1][name]:California
itemsToEdit[1][code]:CA
但我显然想要这个,因为我相信这是对 SomeClass 列表的正确映射:
itemsToEdit[0].id:4
itemsToEdit[0].name:Florida
itemsToEdit[0].code:FL
itemsToEdit[1].id:3
itemsToEdit[1].name:California
itemsToEdit[1].code:CA
我哪里错了?
(理解上下文可能不是重要的信息:我使用 Stripes 框架,它将请求中的参数映射到调用的 ActionBean 字段)
谢谢!
【问题讨论】:
-
itemsToEdit[0][id]:4和itemsToEdit[0].id:4UM,它们的含义完全相同。括号和点符号。 -
好的。但是 Stripes 框架不这么认为 :) 因为第一个变体是通过 stripes 映射到: private List
-
如果你将一个数组传递给
data:,jQuery 几乎不会像你期望的那样做。您检查过您的 POST 请求的实际内容吗? -
是的。我在我的问题中指定了它。这是我的 POST 请求的实际内容:itemsToEdit[0][id]:4 ... 甚至,Stripes 框架确实将其映射到 List
-
@gs_vlad,你找到解决这个问题的方法了吗?我也遇到了同样的问题。
标签: javascript jquery ajax arrays stripes