【问题标题】:Input array is converted to hash in Rails params输入数组在 Rails 参数中转换为哈希
【发布时间】:2014-08-08 10:49:58
【问题描述】:

我在 AJAX 请求中发送一个数组:

$.ajax(
    {
        type: "POST",
        url: "http://192.168.0.15/calc",
        data: {
            "phone": phone,
            "points": [
                { "lat": 59.15234, "lon": 30.99 },
                { "lat": 59.15244, "lon": 30.99 },
                { "lat": 59.15254, "lon": 30.99 }
            ],
            "start_at": 1407249093,
            "certificate": "849840487484"
        },
        success: function(data) {
            alert('success');
        },
        error: function(jqXHR, textStatus, errorThrown){
            console.log(jqXHR.statusCode());
            console.log(textStatus);
            console.log(errorThrown);
        }
    }
);

然后检查点:

params[:points].inspect

并查看哈希:

{
  "0"=>{"lat"=>"59.15234", "lon"=>"30.99"},
  "1"=>{"lat"=>"59.15244", "lon"=>"30.99"},
  "2"=>{"lat"=>"59.15254", "lon"=>"30.99"}
}

如何得到一个数组而不是hash(最好是一开始,不用把hash转成数组)?

【问题讨论】:

标签: ruby-on-rails parameter-passing


【解决方案1】:

解决办法

Rails not decoding JSON from jQuery correctly (array becoming a hash with integer keys)

只需添加内容类型并将其设置为contentType: 'application/json'

【讨论】:

  • 不幸的是,那里指出的解决方案导致 jQ 发送一个 OPTIONS 请求。我什至不知道这个 HTTP 方法存在。响应为 404。
  • P.S.这是因为相同的域策略。将表单放入 Web 应用程序后,一切正常。
【解决方案2】:

如果可以的话:

"points": [
    '{ "lat": 59.15234, "lon": 30.99 }',
    '{ "lat": 59.15244, "lon": 30.99 }',
    '{ "lat": 59.15254, "lon": 30.99 }'
]

现在这将被视为字符串数组,在解析时您可以将其转换为哈希进行解析。

告诉我这是否能解决您的问题。

编辑

$.ajax({
  ..
  ..
  dataType: 'json',
  contentType: 'application/json',
  data : JSON.stringify({"points": [
     { "lat": 59.15234, "lon": 30.99 },
     { "lat": 59.15244, "lon": 30.99 },
     { "lat": 59.15254, "lon": 30.99 }]
  })
});

【讨论】:

  • 这似乎是一种解决方法,而不是真正的解决方案。
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 2012-10-29
  • 2013-09-16
  • 2019-10-27
  • 2019-05-23
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多