Ответ 1
escape_javascript(javascript)
Сбрасывает возврат каретки и одиночные и двойные кавычки для сегментов JavaScript.
Также доступен через псевдоним j().
Из рельсов docs.
Я просто наткнулся на блог, в котором упоминается функция j
в Rails. Они использовали его для обновления страниц стиля ajax.
$('#cart').html("<%=j render @cart %>");
Я получаю, что они используют partials для рендеринга части cart
, но в чем смысл j
? Я нашел несколько статей, в которых говорится, что он преобразует строку в то, что JavaScript примет, но что это значит?
escape_javascript(javascript)
Сбрасывает возврат каретки и одиночные и двойные кавычки для сегментов JavaScript.
Также доступен через псевдоним j().
Из рельсов docs.
Питер действительно опубликовал правильный ответ. Но я попытаюсь уточнить:
Я думаю, вы знакомы с базовой концепцией 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.
и, следовательно, предотвращает выполнение кода в браузере.