如何在Rails中发送JSON数组和表单中的数据

How to send JSON array together with data from form in Rails?

本文关键字:数组 表单 数据 JSON Rails      更新时间:2023-09-26

我有视图与表单包含一些字段和谷歌地图工具,以下降标记。我想附加到请求标记坐标存储为JavaScript JSON数组。我会在填写所有字段后发送,并选择标记所有数据,只需点击发送按钮。由jQuery $(this).serialize()转换的表单不被Rails接受。说明性材料:

JavaScript:

$('form').submit(function () {
    var url = $(this).attr('action');
    var data = { post: JSON.stringify(markersArray) };
    // var data = $(this).serialize();
    $.post(url, data, function(result) {
        //result
    });
    return false;
});
Rails控制器:

def create
  received_data = params[:post]
  markersArray = ActiveSupport::JSON.decode(received_data)
  #only JSON
  @post = Post.new(markersArray)
  #normal approach only form
  #@post = Post.new(received_data)
  @post.save
end

编辑

接收JSON:

Parameters: {"post"=>"{'"markers'":[[52.40637,16.92517],[52.40601,16.925040000000003],[52.405750000000005,16.92493],[52.40514,16.92463],[52.404320000000006,16.924200000000003],[52.40393,16.92406]]}"}
收到形式:

Parameters: {
    "utf8"=>"✓", 
    "authenticity_token"=>"nehoT1fnza/ZW4XB4v27uZsfFjjOu/ucIhzMmMKgWPo=", 
    "post"=>{
         "title"=>"test", 
         "description"=>"fewfewfew"}, 
    "commit"=>"Save"}

您可以临时添加隐藏字段并在序列化后将其删除:

$('form').submit(function () {
    var url = $(this).attr('action');
    var tempField = $('<input type="hidden" name="post" />').val(JSON.stringify(markersArray)).appendTo(this);
    var data = $(this).serialize();
    tempField.remove();
    $.post(url, data, function(result) {
        //result
    });
    return false;
});

或者您可以从反序列化的数据中发送对象,并使用您的post数据进行增强

$('form').submit(function () {
    var url = $(this).attr('action');
    var data = jQuery.parseJson($(this).serialize());
    data.post =  JSON.stringify(markersArray) 

    $.post(url, data, function(result) {
        //result
    });
    return false;
});