传递多个变量以在rails cotroller中渲染json

Rah*_*ava 4 javascript json ruby-on-rails ruby-on-rails-4

我试图将数据从控制器传递给javascript.这是你如何做到的,

respond_to do |format|
  format.html
  format.json { render json: {data: @data} }
end
Run Code Online (Sandbox Code Playgroud)

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

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

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

合理.对?

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

应该这样做:

respond_to do |format|
  format.html
  format.json { render json: {data: @data, data1: @data1, data2: @data2} }
end
Run Code Online (Sandbox Code Playgroud)

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

<%= javascript_tag do%>
  window.data = <%= raw @data.to_json, @data1.to_json %>
<%end%>
Run Code Online (Sandbox Code Playgroud)

任何线索将不胜感激.

干杯!

hag*_*ope 6

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

respond_to do |format|
  format.html
  format.json { render json: {all_data: {data: @data, data1: @data1, data2: @data2}}}
end
Run Code Online (Sandbox Code Playgroud)

在前端:

<%= javascript_tag do%>
  window.data = <%= raw @all_data.to_json %>
<%end%>
Run Code Online (Sandbox Code Playgroud)

现在window.data应该有你需要的一切window.data.data,window.data.data1,window.data.data2.