2011-11-12 23 views
0

我有窗体视图包含几个字段和谷歌地图与工具放置标记。我想附加到以JavaScript JSON数组存储的请求标记坐标。填写完所有字段后,我会发送,并通过单击发送按钮选择标记所有数据。由jQuery $(this).serialize()转换的表单不被Rails接受。说明性材料:如何将JSON数组与来自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; 
}); 

滑轨控制器:

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

收稿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"} 
+0

'params [:post]'的价值是什么? – nicholaides

回答

1

你可以临时添加一个隐藏字段和序列化之后将其删除:

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

,或者您可以发送从反序列化数据的对象,enhaced与你的讯息数据

$('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; 
}); 
相关问题