【问题标题】:Converting ruby array to javascript array not working properly将 ruby​​ 数组转换为 javascript 数组无法正常工作
【发布时间】:2025-12-05 09:45:01
【问题描述】:

我正在尝试在我的 rails 应用程序中将 ruby​​ 数组转换为 javascript 数组

@qs #=> [1, 4]

javascript代码是:

var js_array =  [<%= @qs.to_json %>];
var arrayLength = js_array.length;
for (var i = 0; i < arrayLength; i++) {
    alert(js_array[i]);
}

但我将arrayLength 设为1。循环中的警告消息显示一次1,4

我试过将数组转换为字符串数组,但没有区别:

var new_array = js_array.map(String);

我需要什么:我应该能够遍历 javascript 数组并提醒每个元素。

【问题讨论】:

    标签: javascript ruby-on-rails arrays ruby


    【解决方案1】:

    to_json 方法返回一个包含数组括号的字符串。因此这应该有效:

    var js_array =  <%= @qs.to_json %>;
    

    【讨论】:

      【解决方案2】:

      使用Haml模板语言时,只需将@qs数组传递给js_array

      var js_array = #{@qs} ;
      

      views中的代码:

      :javascript
        var js_array =  #{@qs};
        var arrayLength = js_array.length;
        for (var i = 0; i < arrayLength; i++) {
          alert(js_array[i]);
        }
      

      @qs = [1,2] 在控制器中。

      【讨论】:

      • 我想为什么要给我一个减号,我已经测试了我的代码并且可以像你想要的那样工作。
      • 它给出了SyntaxError: illegal character。在var js_array = #{@qs};
      • @jonsnow 我已经更新了我的答案,但这对我来说真的很好...... :(
      • 看起来您使用的是 Haml,但 OP 使用的是 ERB 模板语言。所以你的回答并没有回答他的问题。
      【解决方案3】:

      这对我有用...

      <script type="text/javascript">
      var js_array = <%= @arr %>
      var arrayLength = js_array.length;
      for (var i = 0; i < arrayLength; i++) {
          alert(js_array[i]);
      }
      </script>
      

      在我的控制器中

      @arr = [1,2,3]
      

      【讨论】:

      • 之所以有效,是因为这是一个简单的案例。如果没有 to_jsonescape_javascript,你不能只在 javascript 代码中转储 Ruby 变量