"); -6ren">
gpt4 book ai didi

javascript - 为什么在渲染部分之前转义 escape_javascript?

转载 作者:IT王子 更新时间:2023-10-29 02:39:06 25 4
gpt4 key购买 nike

我正在查看 this Railscast episode并想知道为什么这里需要调用 escape_javascript:

$("#reviews").append("<%= escape_javascript(render(:partial => @review)) %>");

escape_javascript 有什么用?

根据 the Rails docs :

escape_javascript(javascript)

Escape carrier returns and single and double quotes for JavaScript segments.

但这对我来说意义不大。

最佳答案

如果将代码分成两部分会更容易理解。

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

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

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

现在让我们检查 <%= ... %> 中的 ruby 部分.什么是render(:partial => @review)做?它正在呈现部分代码 - 这意味着它可以呈现任何类型的代码 - html、css ... 甚至更多 javascript!

那么,如果我们的部分包含一些简单的 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>");

为了避免这种情况发生,您希望转义这些特殊字符,这样您的字符串就不会被 chop ——您需要一些东西来代替它:

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

这是什么escape_javascript做。它确保返回的字符串不会“破坏”javascript。如果你使用它,你会得到想要的输出:

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

问候!

关于javascript - 为什么在渲染部分之前转义 escape_javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1620113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com