您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么要在渲染局部之前进行scape_javascript?

为什么要在渲染局部之前进行scape_javascript?

如果将代码分为两部分,则更容易理解。

第一部分$("#reviews").append("<%= ... %>");是带有erb的javascript。这意味着,<%= ... %>它将被内部返回的任何红宝石代码替换。替换的结果必须是有效的javascript,否则客户端尝试对其进行处理时将抛出错误。这就是第一件事:您需要有效的javascript。

要考虑的另一件事是,ruby生成的任何内容都必须包含在带有双引号的javascript字符串内-注意周围的双引号<%= ... %>。这意味着生成的javascript将如下所示:

$("#reviews").append("...");

现在,让我们检查中的红宝石部分<%= ... %>。怎么render(:partial => @review)办?它正在呈现部分内容-这意味着它可以呈现任何类型的代码-html,css …甚至更多的javascript!

那么,如果我们的partial包含一些简单的html(如此),会发生什么呢?

<a href="/mycontroller/myaction">Action!</a> 

还记得您的JavaScript将双引号字符串作为参数吗?如果我们简单地用<%= … %>那个部分的代码替换,那么我们就会有一个问题-在href=双引号之后马上!javascript将无效:

// Without escaping, you get a broken javascript string at href
$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");

为了避免这种情况的发生,您希望转义这些特殊字符,以便不对字符串进行剪切-您需要生成此字符的东西:

<a href=\"/mycontroller/myaction\">Action!</a>

这是escape_javascript做什么的。它确保返回的字符串不会“破坏” javascript。如果使用它,将获得所需的输出

$("#reviews").append("<a href=\"/mycontroller/myaction\">Action!</a>")

问候!

javascript 2022/1/1 18:17:22 有470人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶