ajax调用中错误的javascript数组序列化

Wrong javascript array serialization in ajax call

本文关键字:javascript 数组 序列化 错误 调用 ajax      更新时间:2023-09-26

我想在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");
      }
   });

问题是:在服务器端,我收到map的列表,而不是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

但是我显然想要这个,因为我相信这是正确的映射到List of someeclass:

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的字段)

谢谢!

我可以看到一些东西可能会使条纹脱落。

  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属性并解析它,而不是解析整个对象。