拥有以下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}
}}
正如您所看到的,数组被转换为具有增量键的哈希。为什么我发送的数据没有收到?
答案 0 :(得分:1)
根据AJAX docs,这是预期的行为。
数据
键入:PlainObject或String或Array
要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。
您可以使用traditional
params[:array][0]
设置来尝试获得完全相同的表示形式,但您应该能够原样使用它。
在您的控制器中,您应该能够执行以下params[:array].each ...
或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}
}
来访问数据。你仍然得到Ruby可以像数组一样处理的响应。如果此数组中有更多记录,它将如下所示。
var_dump($GLOBALS['pagination']);