У меня есть простое приложение в рельсах, оно должно отвечать на json с помощью этого show.js.erb,
{ "opening": "<%= @frame.opening %>", "closing": "<%= @frame.closing %>"}
Проблема в том, что когда @frame.opening является многострочным, тогда в jquery не будет анализироваться это как объект (вместо этого это будет строка),
ошибка
"parsererror" SyntaxError: Неожиданный токен
обратите внимание, что если я использую \n в тексте, который является @frame.opening, проблем не будет, только если я использую ключ ввода в строке, он сломается. Дайте мне знать, если есть необходимость в дополнительной информации.
Не кодируйте JSON вручную! Это трудно сделать (как вы заметили), и, кроме того, гораздо проще позволить Rails сделать это за вас. Попробуй это:
{ opening: @frame.opening, closing: @frame.closing }.to_json
to_json
будет выплевывать правильно сформированную строку JSON для использования, обрабатывая символы новой строки и многое другое. Например:
pry(main)> hash = { foo: "asdfasdf
pry(main)*
pry(main)* asdfsf" }
pry(main)> puts hash.to_json
{"foo":"asdfasdf\n\nasdfsf"}
Редактирование OP: Поскольку я предполагаю, что больше людей столкнутся с этим, мне пришлось добавить.html_safe, поскольку ERB добавлял материал, чтобы заставить его работать для HTML, но его JSON.
Я не должен использовать представление для этого, но в любом случае он должен выглядеть так,
<%= {}.to_json.html_safe %>
show.json.erb
, а неshow.js.erb