【问题标题】:How do I POST a data object that contains an array?如何发布包含数组的数据对象?
【发布时间】:2015-12-09 16:50:37
【问题描述】:

我想POST一个包含数组的数据对象。

我认为对象需要在发布之前进行序列化,但我不知道该怎么做。

我尝试了以下方法,但我使用的 serialize 函数中断了,因为我的对象包含一个数组:

var serialize = function (obj, prefix) 
{
  var str = [];
  for(var p in obj) {
    if (obj.hasOwnProperty(p)) {
      var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
      str.push(typeof v == "object" ?
        serialize(v, k) :
        encodeURIComponent(k) + "=" + encodeURIComponent(v));
    }
  }
  return str.join("&");
};

$.ajax({
  type: 'POST',
  url: '/xxxx',
  data: serialize({
    a: 'xxx',
    b: 123456,
    c: [{d: "xxx", e: "xxx"}, {d: "xxx", e: "xxx"}]
  })
});

});

【问题讨论】:

  • 添加到下面的答案中,jQuery 已经为表单元素提供了一个 serialize() 函数。

标签: javascript html arrays post serialization


【解决方案1】:

这完全取决于如何你想序列化它。没有标准可以用表单支持的任何标准数据类型来表示数组。

如果您只是将纯对象传递给 jQuery 的 data,那么它将使用 PHP 的表示数组的约定将其序列化为 www-url-form-encoded(然后您可以通过 PHP 中的 $_POST 或使用 this Perl module 访问)。

如果您通过 JSON.stringify() 传递它,那么您将获得 JSON(并且还应该指定 contentType: "application/json")。

【讨论】:

    【解决方案2】:

    在 AJAX 中数据可以是 PlainObject/String/Array

    数据

    类型:PlainObject 或 String 或 Array

    要发送到的数据 服务器。如果还不是字符串,则将其转换为查询字符串。 它附加到 GET 请求的 url。请参阅 processData 选项 防止这种自动处理。对象必须是键/值对。如果 value 是一个数组,jQuery 用相同的键序列化多个值 基于传统设置的值(如下所述)。

    $.ajax({
      type: 'POST',
      url: '/xxxx',
      data: {
        a: 'xxx',
        b: 123456,
        c: [{
          d: "xxx",
          e: "xxx"
        }, {
          d: "xxx",
          e: "xxx"
        }]
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多