jquery.data 返回 json 字符串而不是对象

jquery.data returning json string instead of object

我正在将 json 渲染到 html 数据属性中,并使用 jquery.data 读取该属性。我期望 $('[data-attribute]').data('attribute') 解析 json 和 return 一个对象,但它会间歇性地 returns 一个字符串。

location.html.erb

<div data-location="<%= render 'location_json' %>">

location_json.erb

<%= @location.to_json(
      only: [:id, :name, :lat, :lng],
      method: [:display_name]) %>

location.js

var location = $('[data-location]').data('location')

我怀疑 encoding/escaping 有问题,有什么想法吗?

ERB 间歇性地添加换行符,导致 json 字符串 jquery.data 无法解析。例如,正确解析的是:

<div data-location="{name&quot;:&quot;Bandido&#x27;s&quot;}">

但这并没有(注意换行符后面的双引号):

<div data-location="
{name&quot;:&quot;Bandido&#x27;s&quot;}
">

要防止 ERB 添加换行符,请在结束 ERB 标记前添加破折号

-%>

解决方案:

<div data-location="<%= render 'location_json' -%>">