[英]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.