简体   繁体   English

如何在Rails中将JSON数组与来自表单的数据一起发送?

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

I have view with form contains a few fields and Google maps with tool to drop markers. 我的窗体视图包含一些字段,而Google地图带有用于放置标记的工具。 I want to attach to the request markers coordinates stored as JavaScript JSON array. 我想附加到存储为JavaScript JSON数组的请求标记坐标。 I would send after filling out all fields and select markers all data by clicking only send button. 我将在填写完所有字段后发送邮件,并通过单击“仅发送”按钮选择标记所有数据。 Form converted by jQuery $(this).serialize() doesn't accept by Rails. 由jQuery $(this).serialize()转换的表单不被Rails接受。 Illustrative material: 说明材料:

JavaScript: 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 controller: 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

EDIT 编辑

Received JSON: 收到的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]]}"}

Received form: 收到表格:

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

You could temporarily add a hidden field and remove it after serialization: 您可以临时添加一个隐藏字段,并在序列化后将其删除:

$('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;
});

or you could send an object from the deserialized data, enhaced with your post data 或者您可以从反序列化的数据中发送一个对象,并附加您的发布数据

$('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;
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM