【问题标题】:Rails / Coffeescript, data in array not being passed propertyRails / Coffeescript,数组中的数据未传递属性
【发布时间】:2016-02-24 19:49:59
【问题描述】:

有以下 Ajax 请求:

data = {foo: {id: 1}, 
        array: [
                {id: 2, date: "Jan  1, 2015", quantity: 100}
               ]}

$.ajax "/api/foo",
  type: "POST",
  dataType: "JSON"
  data: data,
  success: (data) ->
    console.log(data)

问题是服务器获取以下参数:

{foo: {id: 1}, 
 array: { 
         0:{id: 2, date: "Jan  1, 2015", quantity: 100}
 }}

如您所见,数组被转换为带有增量键的散列。为什么我发送的数据没有收到?

【问题讨论】:

    标签: jquery ruby-on-rails ajax coffeescript


    【解决方案1】:

    根据AJAX docs,这是预期的行为。

    数据

    类型:PlainObject 或 String 或 Array

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

    您可以使用traditional 设置mentioned in the docs 来尝试获得完全相同的表示,尽管您应该能够按原样使用它。

    在您的控制器中,您应该能够执行以下params[:array][0]params[:array].each ... 来访问数据。您仍然会得到 Ruby 可以像数组一样处理的响应。如果这个数组中有更多的记录,它看起来像这样。

    array: { 
      0:{id: 2, date: "Jan  1, 2015", quantity: 100}
      1:{id: 3, date: "Jan  1, 2015", quantity: 200}
      2:{id: 4, date: "Jan  1, 2015", quantity: 300}
    }
    

    【讨论】:

    • 通过多种方法访问端点,我希望有一个标准化的格式。因此,我试图让数组正确传递。
    • 可以理解。 This stack overflow 解释了我回答中的第二个链接。让我知道设置 traditional = true 是否有效。
    • Traditional = true 不起作用,这些是服务器接收的参数:{"foo"=>"[object Object]", "array"=>"[object Object]"}
    • 谢谢。我刚刚做了一些有点 hacky 的事情,所以这两种情况都有效。
    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多