Rails中的j函数有什么作用?

Tyl*_*itt 50 javascript ajax ruby-on-rails partial-views

我刚刚看到一篇博客提到了jRails 中的一个函数.他们用它来做ajax风格的页面更新.

$('#cart').html("<%=j render @cart %>");
Run Code Online (Sandbox Code Playgroud)

我得到他们正在使用cart局部渲染部分,但最重要的是j什么?我发现一些文章说它将字符串转换为JavaScript会接受的内容,但这意味着什么?

wpp*_*wpp 75

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

我猜你熟悉ajax的基本概念?假设您希望能够以ajaxy方式创建评论.在rails中,您可以在您的via中响应POST请求CommentsController:

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

这意味着如果来自客户端的ajax请求(通过jquery/javascript)被提交给CommentsController它,它将识别format(.js)并使用_create.js.erb partial进行响应.然后,partial将使用以下内容呈现新注释:

$('.comments').append("<%=j render @comment %>");
Run Code Online (Sandbox Code Playgroud)

现在来到j或escape_javascript方法: 一些邪恶的用户可能会提交包含(恶意)javascript的评论,这些评论将在你的页面上执行,除非你使用的j方法是

转义回车以及JavaScript段的单引号和双引号.

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

  • 请注意,即使您渲染的内容不是用户创建的,您可能仍然希望转义非 javascript 安全的字符,否则您的 javascript 可能会崩溃。 (2认同)

Pet*_*bot 61

escape_javascript(javascript)

转义回车以及JavaScript段的单引号和双引号.

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

来自rails docs.