【问题标题】:Send javascript variables to rails?将javascript变量发送到rails?
【发布时间】:2011-04-13 20:19:11
【问题描述】:

我需要为控制器播种一个 javascript 变量。例如,如果我在视图中的代码如下 -

    ...  <script type="text/javascript">
           variable_test = 'hello'
         </script> 
    ...

我需要控制器来获取 variable_test ,比如 -

 def hello
 @variable_test = #Some code
 # @variable_test => 'hello'
 end

视图当然是你好,“一些代码”是我不知道该怎么做的。

【问题讨论】:

  • 创建隐藏字段,将你的js变量赋值给该字段的值,用ajax发布这个隐藏字段。

标签: javascript ruby-on-rails ajax


【解决方案1】:

除非您执行某种获取或发布操作,否则您无法将客户端代码发送到控制器。尝试使用 jQuery 的 post 或 get 方法。如果您不使用 jQuery,那么您可以执行以下操作:

var variable_test = 'hello';
var el = document.createElement('script');
el.setAttribute('src', 'path_to_controller' + '?variable_test=' + variable_test);
document.body.appendChild(el);

然后在你的控制器中你会这样做:

@varliable_test = params[:varliable_test]

语法可能有点不对劲,但你明白了。

【讨论】:

  • 用 jQuery ajax 请求解决。谢谢:)
【解决方案2】:

首先,您需要以某种方式调用控制器。数据在表单中并提交表单,或者从 javascript 进行 AJAX 调用。在第一种情况下,您希望使用 javascript 将隐藏的输入添加到具有您想要的名称和值的表单中。在第二种情况下,您通过 AJAX 请求发送的数据需要包含您想要的名称-值对。如果不了解您在做什么,我无法更具体;您是在提交表单还是在使用 AJAX,如果您在使用 AJAX,您是在使用 javascript 库,还是使用任何用于 ajax 的内置 Rails 助手(例如 remote_function)。

不过,无论哪种方式,您都希望得到一个包含名称-值对“varliable_test=hello”的请求。然后你就做

@varliable_test = params[:varliable_test]

访问控制器中的值。

(我还必须注意,您的意思可能是“变量”,而不是“变量”,但显然只要您保持一致,这不会影响功能。)

【讨论】:

  • 我的意思是“变量”而不是“变量”。抱歉拼写错误,我不是以英语为母语的人。
【解决方案3】:

我也在寻找这个问题的答案。在我的一个应用程序中,我需要从 Google 的 Places Autocomplete 获取数据。这种方法对我来说似乎是一个完美的解决方案(感谢 Thaha kp:How to pass a javascript variable into a erb code in a js view?

查看:

<script type="text/javascript">
  var variable_test = 'hello';
  $(document).ready(function() {
    $('#model_variable_test').val(variable_test);
  });
</script>

...

<%= form_for :model do |f| %>
  ...
  <%= f.hidden_field :variable_test %>
  ...
<% end %>

控制器:

def hello
  @variable_test = params[:model][:variable_test]
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多