Неправильный анализ ответа JSON с многострочным из рельсов

1

У меня есть простое приложение в рельсах, оно должно отвечать на json с помощью этого show.js.erb,

 { "opening": "<%= @frame.opening %>", "closing": "<%= @frame.closing %>"}

Проблема в том, что когда @frame.opening является многострочным, тогда в jquery не будет анализироваться это как объект (вместо этого это будет строка),

ошибка

"parsererror" SyntaxError: Неожиданный токен

обратите внимание, что если я использую \n в тексте, который является @frame.opening, проблем не будет, только если я использую ключ ввода в строке, он сломается. Дайте мне знать, если есть необходимость в дополнительной информации.

  • 0
    Это должен быть show.json.erb , а не show.js.erb

1 ответ

0
Лучший ответ

Не кодируйте 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 %>
  • 0
    Круто, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню