【问题标题】:Ajax array transforming into associative arrayAjax 数组转换为关联数组
【发布时间】:2020-07-17 02:54:09
【问题描述】:

所以,我正在 Ruby on Rails 中构建一个 API,并试图强制通过 ajax 发送一个数组。

如果不是因为数组作为常规数组以外的关联数组被接收,这似乎是一件很容易的事!

基本上是一个包含以下对象的数组:

[
        {
            "shipping_id":"1",
            "option":"1"
        },
        {
            "shipping_id":"2",
            "option":"2"
        }
]

变成:

{"0"=>{"shipment_id"=>"1", "option"=>"1"}, "1"=>{"shipment_id"=>"2", "option"=>"2"}}

而不是

[{"shipping_id"=>"1", "option"=>"1"}, {"shipping_id"=>"2", "option"=>"2"}]

这是我用来测试 API 的 JS:

function select_shipping(){

        obj1 = {
            "shipment_id": "1",
            "option": "1"
        };

        obj2 = {
            "shipment_id": "2",
            "option": "2"
        };
        var shipments = [obj1, obj2];
        var payload = {
            user_options: shipments
        }

        $.post('/shipping/calculate/select',   // url
        payload, // data to be submit
        function(data, status, jqXHR) {// success callback
            console.log(data);

         })
}

如何将我的有效负载转换为常规数组而不是关联数组?

【问题讨论】:

  • 为什么不使用 var shipping = {"$1": obj2,"$2": obj3}; ???
  • 您可以动态处理货件,只是您知道如何检索 obj1 和 obj2 值。是否有更多的对象要提交?
  • 好像有人问过你同样的场景,得到了答案stackoverflow.com/a/38175543/615274
  • 您是否以 JSON 格式发送请求?如果将其视为表单数据,则 Rack 将散列数组编码为 foo[0][foo]=bar 那是因为如果将其编码为 foo[][foo]=bar Rack 无法知道密钥属于哪个散列。在 Ruby 中,“关联数组”也不是一个东西——它只是一个哈希,如果你想将它“转换”到一个数组中,你只需调用 hash.values,这会自动使用强参数完成。

标签: javascript ruby-on-rails ajax api


【解决方案1】:

您可以执行以下操作:

请注意,此解决方案可以处理任意数量的货物。

var shipments = [
  {
      "shipping_id":"1",
      "option":"1"
  },
  {
      "shipping_id":"2",
      "option":"2"
  }
]

var payload = {}

shipments.map(
  function(shipment, index){
    payload["$".concat(index)] = shipment;
  }
);

console.log(payload);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 2011-07-11
    • 2017-01-10
    • 2011-05-08
    • 2020-04-23
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多