частичный рендеринг с помощью js.haml в ответе AJAX

#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.