传递多个变量以在rails控制器中渲染json

时间:2015-04-10 16:30:14

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

我正在尝试将数据从控制器传递给javascript。你就是这样做的,

respond_to do |format|
  format.html
  format.json { render json: {data: @data} }
end

然后在你的视图文件中,你应该这样做:

<%= javascript_tag do%>
  window.data = <%= raw @data.to_json %>
<%end%>

<script>
  for( i = 0; i < data.length; i++ ) {
    alert(data[i]);
  }
</script>

有道理。正确?

但是,上面的代码是在json代码中只传递一个变量,即数据变量时。我需要做的是将多个变量传递给我的javascript代码。

应该这样做:

respond_to do |format|
  format.html
  format.json { render json: {data: @data, data1: @data1, data2: @data2} }
end

现在, - 我应该如何访问data1&amp;我的视图文件中的data2变量? - 我需要修改window.data吗?我尝试了下面的代码但它没有成功。给我论证错误。

<%= javascript_tag do%>
  window.data = <%= raw @data.to_json, @data1.to_json %>
<%end%>

任何线索都会受到赞赏。

干杯!

1 个答案:

答案 0 :(得分:6)

render json调用将呈现单个对象,因此请尝试将所有数据存储在单个JSON对象(或数组)中:

respond_to do |format|
  format.html
  format.json { render json: {all_data: {data: @data, data1: @data1, data2: @data2}}}
end

在前端:

<%= javascript_tag do%>
  window.data = <%= raw @all_data.to_json %>
<%end%>

现在window.data应该包含window.data.datawindow.data.data1window.data.data2所需的一切。