【问题标题】:Rails - passing data hash from Ruby to JS via js.erb fileRails - 通过 js.erb 文件将数据哈希从 Ruby 传递到 JS
【发布时间】:2021-01-14 20:13:00
【问题描述】:

这是我的控制器:

      def show
        @result = {"data"=>{"8"=>{"typeA"=>{"tier"=>[1,2],"message"=>"message"},"typeB"=>"sto"}}}
        respond_to do |format|
          format.js
        end
      end

所以在show.js.erb 中我希望能够创建一个JS 对象data@result['data']。但它真的不起作用......我似乎能得到最接近的是字符串表示,但是JSON.parse 无法将其转换为 JS 对象,因为所有字符都已编码:

  console.log("<%= @result['data'] %>")
  var data = JSON.parse("<%= @result['data'] %>") 
  console.log(data)

ACTUAL OUTPUT

  > {&quot;8&quot;:{&quot;typeA&quot;:{&quot;message&quot;:&quot;message&quot;,&quot;tier&quot;:[1,2]},&quot;typeB&quot;:&quot;sto&quot;}}

  > Uncaught SYntaxError: Unexpected token & in JSON at position 1

DESIRED OUTPUT (for second console.log)

  > {"8":{"typeA":{"tier":[1,2],"message":"message"},"typeB":"sto"}}

请注意,我尝试过 @result.to_json,但这没有帮助

【问题讨论】:

    标签: javascript ruby-on-rails interpolation


    【解决方案1】:

    除非你使用raw view helper,Rails 会自动转义标签。

    这应该可以解决问题:

      var data = <%= raw(@result.to_json) %>;
      console.log(data);
      console.log(typeof data);
    

    【讨论】:

      【解决方案2】:

      你试过了吗

      @result.to_json
      

      jescape_javascript 助手?

      var data = JSON.parse("<%= j @result['data'] %>")
      

      【讨论】:

      • 是的,不幸的是我得到了与j相同的输出
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多