Что делает функция j в Rails?

Я просто наткнулся на блог, в котором упоминается функция j в Rails. Они использовали его для обновления страниц стиля ajax.

$('#cart').html("<%=j render @cart %>");

Я получаю, что они используют partials для рендеринга части cart, но в чем смысл j? Я нашел несколько статей, в которых говорится, что он преобразует строку в то, что JavaScript примет, но что это значит?

Ответ 1

escape_javascript(javascript)

Сбрасывает возврат каретки и одиночные и двойные кавычки для сегментов JavaScript.

Также доступен через псевдоним j().

Из рельсов docs.

Ответ 2

Питер действительно опубликовал правильный ответ. Но я попытаюсь уточнить:

Я думаю, вы знакомы с базовой концепцией ajax? Допустим, вы хотите иметь возможность создавать комментарии в стиле ajaxy. В рельсах вы можете отвечать на запросы POST в CommentsController через:

def create
  @comment = Comment.new(params[:comment])
  respond_to do |format|
    render.js
  end
end

Это означает, что если запрос ajax от клиента (через jquery/javascript) отправляется в CommentsController, он распознает формат (.js) и отвечает _create.js.erb. Затем частичный текст будет выглядеть следующим образом:

$('.comments').append("<%=j render @comment %>");

Теперь, чтобы перейти к методу j или escape_javascript: Некоторый злой пользователь может отправить комментарий, содержащий (вредоносный) javascript, который будет выполнен на вашей странице , если не использовать метод j, который

Сбрасывает возврат каретки и одинарные и двойные кавычки для сегментов JavaScript.

и, следовательно, предотвращает выполнение кода в браузере.