2014-07-08 41 views
0

我想在ajax调用中传递javascript对象数组。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 

我在哪里错了?

(也许并不重要信息,了解背景:我使用的条纹框架和它在请求映射参数称为ActionBean的字段)

谢谢!

+0

'itemsToEdit [0] [id]:4'和'itemsToEdit [0] .id:4' UM,它们意味着同样的事情。括号和点符号。 – epascarello

+0

好的。但是Stripes框架并不这么认为:)因为第一个变体是通过条带映射到:private List > itemsToEdit;第二个变体为:private List itemsToEdit; –

+0

如果你将一个数组传递给'data:',那么jQuery几乎不会做你期望的事情。你有没有检查你的POST请求的实际内容? – Bergi

回答

0

我可以看到一些可能会丢掉条纹的东西。

  1. 虽然没有什么,你现在正在发送会引起问题,你应该在你传递数据使用JSON.stringify()

  2. AJAX调用通常发送JSON对象,而不是数组。

尝试发送和接收,像这样的数组:

$.ajax({ 
    url: "MyActionBean.action?saveChanges", 
    type: "Post", 
    dataType: "json", 
    data: { 
     'items': JSON.stringify(itemsToEdit) 
    }, 
    success: function(data) { 
     alert("Oh, no"); 
    } 
}); 

另一方面,检索接收到的对象的items财产和解析的那个,而不是整个对象。