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
> {"8":{"typeA":{"message":"message","tier":[1,2]},"typeB":"sto"}}
> 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
或j
或escape_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);
这是我的控制器:
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
> {"8":{"typeA":{"message":"message","tier":[1,2]},"typeB":"sto"}}
> 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
或j
或escape_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);