javascript - ruby rails : how to pass JSON to JavaScript

标签 javascript ruby-on-rails json ruby security

我的 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 %>"

其他人也遇到过这个问题,但在这种情况下似乎没有任何解决方案有效。我试过 rawhtml_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/

相关文章:

php - 从本地主机提交表单到(自己的)服务器

javascript - 创建动态元素和 document.write

json - 如何替换JSON键值?

java - 将 hibernate 实体转换为 JSON : oblectId instead of whole object

javascript - 使用 Axios 在 Microsoft Teams 中发布消息

javascript - 使用 Object.create 扩展原生 JavaScript 对象

ruby-on-rails - Rails capybara 特性规范 No 'Access-Control-Allow-Origin'

ruby-on-rails - Ruby 开发环境(OS X 与 Ubuntu)

ruby-on-rails - 嵌套资源形式上未初始化的常量

javascript - 有没有办法创建与 JSON.stringify(jsObject) 创建的 Java <-> JSON 映射对象完全相同的字符串?