【问题标题】:Ruby on Rails: how to pass JSON to JavaScriptRuby on Rails:如何将 JSON 传递给 JavaScript
【发布时间】:2017-09-01 19:45:08
【问题描述】:

我的 Ruby on Rails 应用程序中有一个 JavaScript sn-p,它与远程服务器通信并向其传递一个 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 %>"
}

我认为问题是实体被转义了。如果我使用 alert 来检查返回的值,我可以看到引号等所有实体都被转义了。

我直接插入值的其他地方似乎工作正常。例如:

invoice_number: "<%= @order.id %>"

其他人也遇到过这个问题,但在这种情况下似乎没有一个解决方案有效。我试过rawhtml_safe等。

我一定错过了什么。解决此问题的最佳方法是什么?

【问题讨论】:

    标签: javascript ruby-on-rails json ruby security


    【解决方案1】:

    存在三个问题。

    首先,你不需要""围绕&lt;%= @items %&gt;

    第二&lt;%= @items %&gt;插入@items.to_s,但{"key" =&gt; 12}.to_s等于'{"key"=&gt;12}',这不是一个有效的JSON。

    第三,您需要html_safe 才能使Rails 不转义特殊字符。

    你会得到:

    items: <%= @items.to_json.html_safe %>
    

    【讨论】:

    • 谢谢丹尼尔,但这不起作用。 JS 在控制台中给我一个与缺少右括号相关的语法错误。 (??)这令人沮丧,因为我可以使用虚拟值编写代码并使其工作,但无法从 ruby​​ 获取要插入的值。它真的想将这些引用表示为实体。
    • items: "[{"sku"=>"1068R-FR", "price"=>#<BigDecimal:7f8cede8d498,'0.1901E2' ,18(27)>, "quantity"=>1, "currency"=>"EUR"}]" }
    • (这就是原始代码放入页面源代码的内容)。我尝试了几种不同的方法,但它总是将引号表示为实体。如果我手动编写代码,它会很好用,但是这当然行不通。必须有一种方法可以将 JSON 对象从 Ruby 中取出并放入 JS 中?感谢丹尼尔的任何建议!
    • 等等……你是对的。当我将数组打印到 rails 控制台时,我得到了这个: [{"sku"=>"1068R-FR", "price"=>#<7f8cf5157af0>
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2016-08-17
    相关资源
    最近更新 更多