Подтвердить что ты не робот

Печать допустимого, неэкранированного JSON в представлении с Rails

Я пробовал все. Каждая комбинация помощников raw, html_safe to_json включает некоторые попытки с ::JSON.encode и CGI.unescape. Проблема в том, что независимо от того, что я делаю, я не могу напечатать хорошо сформированный JSON в представлении. Он всегда удалялся HTML.

Здесь код на мой взгляд:

var campaignData<%= "=" + (raw @campaign.to_json) if @campaign %>;

В моем случае это всегда кавычки, которые экранируются как ". Я бы просто сделал gsub в кавычках, но это ужасное решение того, что ИМО должно быть очень простым, хорошо документированным вариантом использования.

4b9b3361

Ответ 1

Проблема здесь в строке "=". Поскольку он считается небезопасным, он окрашивает другую строку.

Возможно, вы также можете:

raw("=" + @campaign.to_json)

или

"= #{@campaign.to_json}".html_safe

которые примерно одинаковы.

Ответ 2

Так как ActiveSupport 2.3.3 вы смогли сделать .as_json

Ответ 3

Вы попробовали escape_javascript?

Вот пример из файла *.haml, который я только что добавил, чтобы проверить свой ответ.

:javascript
  var foo=$.parseJSON("#{j @albums.to_json}")

Где j - короткий псевдоним для escape_javascript.

Ответ 4

Попробуйте это с помощью

var campaignData<%=h " =#{raw @campaign.to_json}" if @campaign %>;