ajax调用中错误的javascript数组序列化
我想在ajax调用中传递javascript对象数组 我这样制作阵列:ajax调用中错误的javascript数组序列化,javascript,jquery,ajax,arrays,stripes,Javascript,Jquery,Ajax,Arrays,Stripes,我想在ajax调用中传递javascript对象数组 我这样制作阵列: var itemsToEdit = []; $(".editedItem[value='true']").closest("tr").each(function() { var itemToEdit = { id: $(this).find(".idInput").val(), name: $(this).find(".nameInput").val(),
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字段
谢谢大家! 我可以看到一些东西可能会脱落条纹 虽然您现在发送的任何内容都不会引起问题,但您应该对所传递的数据使用JSON.stringify AJAX调用通常发送JSON对象,而不是数组 尝试按如下方式发送和接收阵列:
$.ajax({
url: "MyActionBean.action?saveChanges",
type: "Post",
dataType: "json",
data: {
'items': JSON.stringify(itemsToEdit)
},
success: function( data ) {
alert("Oh, no");
}
});
另一方面,检索接收对象的items属性,并分析该属性而不是整个对象。itemsToEdit[0][id]:4和itemsToEdit[0]。id:4 UM,它们的含义完全相同。括号和点符号。好的。但Stripes框架并不这么认为:因为第一个变体由Stripes映射到:private List itemsToEdit;第二个变量为:private List itemsToEdit;如果将数组传递给data:,jQuery将很难实现预期的功能。你检查过你的发帖请求的实际内容了吗?是的。我在问题中详细说明了这一点。这是我的帖子请求的实际内容:itemsToEdit[0][id]:4。。。更重要的是,Stripes框架将其映射到列表中。我在服务器端接收它。在jQueryAjax文档中,他们说您可以通过arrays@gs_vlad,你找到这个问题的解决方案了吗?,我也遇到了同样的问题。