如何在HTTP POST表单中嵌入JSON对象?

时间:2012-02-27 21:56:27

标签: javascript jquery ruby-on-rails ruby json

我想嵌入一个JSON对象作为表单参数发送到rails服务器 这是我到目前为止:

<% form_tag :action => :create, :controller => :objects do %>
    <%= text_field_tag :object %>
    <%= submit_tag %>
<% end %>

和填充该字段的javascript。 data是有效的JSON。

<script type="text/javascript">
$j(function(){
    jQuery("#proposal").val(JSON.stringify(data));
});
</script>

但是,当服务器收到POST时,我需要将params[:object]转换为哈希值,但它会被双重转义,即使使用.gsub("\\", ""),JSON.parse也会出现错误,实际上并没有从字符串转换为JSON对象。

这是我的服务器收到的JSON字符串:

"{\"name\":\"hello there,
 I am JSON!\",
\"template_id\":1,
\"variables\":{\"hello\":\"there\",
\"me\":\"you\"},
\"sections\":\"[{\\\"name\\\": \\\"Template Section\\\",
 \\\"contents\\\": [{\\\"id\\\": 1,
 \\\"name\\\": \\\"RENAMED!\\\"}]},
 {\\\"name\\\": \\\"section2\\\",
 \\\"contents\\\": [{\\\"name\\\": \\\"something\\\",
 \\\"body\\\": \\\"nothing\\\"},
 {\\\"id\\\": 2,
 \\\"name\\\": \\\"I renamed you\\\",
 \\\"variables\\\": {\\\"hello\\\": \\\"i'm amazing\\\"}}]}]\",
\"attachments\":\"[{\\\"media_id\\\": 1}]\"}"

1 个答案:

答案 0 :(得分:1)

data已经是一个json序列化字符串,您不必使用JSON.stringify(),它将再次序列化它。只需按原样设置即可。

$j(function(){
    jQuery("#proposal").val(data);
});