Rails - 通过 js.erb 文件将数据散列从 Ruby 传递到 JS

Rails - passing data hash from Ruby to JS via js.erb file

这是我的控制器:

      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,但没有用

你试过了吗

@result.to_json

jescape_javascript帮手?

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

除非您使用 raw view helper,否则 Rails 将自动转义标签。

这应该可以解决问题:

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