#jquery #ajax #ruby-on-rails-3 #haml #partial-views
#jquery #ajax #ruby-on-rails-3 #haml #частичный просмотр
Вопрос:
У меня возникли проблемы с рендерингом ответа через AJAX.
Вот как выглядит мой вид .js.haml:
:plain
$("#cart").replaceWith("#{escape_javascript(render 'carts/cart')}");
HTML-код в partial отображается неправильно и нарушает HTML-макет. В веб-инспекторе Safari я получаю следующий ответ XHR:
$(«#cart»).replaceWith(«Ваш заказ2>
Очевидно, что HTML-код поврежден: тег h2 закрыт неправильно, значения атрибутов не заключены в квадратные скобки и т.д.
Часть страницы, которая была заменена таким ответом, будет повреждена.
Я также пробовал некоторые другие методы, подобные этому:
!= "$('#cart').replaceWith('#{escape_javascript(render 'carts/cart')}');"
Результат тот же.
Однако простые случаи, такие как
:plain
$("#cart").replaceWith("<p>Test</p>");
Работают нормально.
Проблема заключается в рендеринге частичного.
PS: Этот частичный рендеринг на 100% корректен, потому что он используется при обычном рендеринге страницы.
Что здесь может быть не так.
Спасибо.
Комментарии:
1. На какой версии R3 вы работаете? Я знаю, что для более поздних требуется
raw
с этимescape_javascript
. Думаю, это сработает с версии 3.0.8. Но, возможно, стоит поискать еще одно место.2. Да, я на Rails 3.0.8. Что такое raw? Приведите пример, пожалуйста.
3.
raw(escape_javascript(...your render...))
Надеюсь, это поможет вам сдвинуться с мертвой точки.4. Я нашел причину. Это ошибка в Rails 3.0.8. github.com/rails/rails/issues/1553
Ответ №1:
Я нашел причину. функция escape_javascript работает некорректно из-за ошибки, найденной в Rails 3.0.8.