我的 Ruby on Rails 应用程序中有一个 JavaScript 片段,它与远程服务器通信并向它传递一个 JSON,该 JSON 由包含 SKU、价格等内容的字典数组组成。
在 Ruby 中生成很简单:
@items = @order.line_items.map do |item|
{
sku: item.variant.sku,
price: item.variant.price
quantity: item.quantity
currency: current_user.currency
}
end
但是,当我将它插入 JavaScript 时——它不起作用。
{
items: "<%= @items %>"
}
我认为问题是实体被转义了。如果我使用警报检查返回值,我可以看到引号等所有实体都被转义了。
我直接插入值的其他地方似乎工作正常。例如:
invoice_number: "<%= @order.id %>"
其他人也遇到过这个问题,但在这种情况下似乎没有任何解决方案有效。我试过 raw
、html_safe
等
我一定是遗漏了什么。解决此问题的最佳方法是什么?
最佳答案
存在三个问题。
首先,你不需要""
周围<%= @items %>
.
其次,<%= @items %>
插入 @items.to_s
,但是{"key" => 12}.to_s
等于 '{"key"=>12}'
,这不是有效的 JSON。
第三,你需要html_safe
使 Rails 不转义特殊字符。
您将获得:
items: <%= @items.to_json.html_safe %>
关于javascript - ruby rails : how to pass JSON to JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46007067/