55

我刚刚看到一个博客,其中提到了jRails 中的一个函数。他们使用它来进行 ajax 样式的页面更新。

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

我知道他们正在使用局部来渲染cart局部,但是有什么意义j呢?我发现一些文章说它将字符串转换为 JavaScript 可以接受的东西,但这是什么意思?

4

2 回答 2

80

彼得实际上发布了正确的答案。但我会尝试详细说明:

我猜你对ajax的基本概念很熟悉吧?假设您希望能够以 ajaxy 方式创建评论。在 Rails 中,您可以通过以下方式响应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 段转义回车和单引号和双引号。

因此阻止在浏览器中执行代码。

于 2012-09-20T18:35:16.883 回答
68

escape_javascript(javascript)

为 JavaScript 段转义回车和单引号和双引号。

也可以通过别名 j() 获得。

来自rails 文档

于 2012-09-20T18:20:45.390 回答