- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
"); -6ren">
我正在查看 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/
我正在使用 Masonry 和 Rails 应用程序来渲染充满图像的屏幕。我的问题是在某个时刻我使用远程 AJAX 表单进行调用,该表单稍后会刷新 div。在那之后,调用 Masonry 将停止工作,
这将传递字符串 productID 而不是变量 which == 5。如何传递变量而不是字符串? $(document).ready(function(){ $(".test").click
我正在查看 this Railscast episode并想知道为什么这里需要调用 escape_javascript: $("#reviews").append(" @review)) %>");
这是我的代码 $(function(){ $('#new_post').bind('ajax:success', function() { $('.posts').append("'post'
我无法解决这个问题,我正在使用 simple_form 并且需要使用模型渲染表单,但问题是具有 escape_javascript 的 js 文件无法在每个文件中获取模型 new.html.erb:
我有一个字段是 xss_sanatised在模型级别保存在数据库中之前。当我想显示这个时,我应该再次 escape_javascript在 View 中渲染它之前? 我的查询应该像这样 User.al
我在使用不显眼的 javascript 时遇到了问题。在我的 TwitterAccountController 中,我有: def unshare @twitter_account = Twitt
当用 jquery 和 rails 替换 html 时(在 4.0.4 上测试),以下工作: replace.js.erb的内容 $('#my_div').html(""); _my_partial.
我需要将变量 js 作为参数传递给rails,但它不起作用。这是我的代码: #function js function load_custom_fields(){ var id = $("MY_S
我不确定我的问题是否与我的问题相关,因为语法着色在欺骗我 我想将 HTML 附加到元素。 link 假设它是调用助手 - getLink 的结果 所以当我这样做时 var newelem = ""
假设我在 JavaScript 函数中,我想访问 Rails 行中的数据,如下所示: var DATA_USED html = " 'change_date_range', :locals => {:
在我正在处理的应用程序中,客户端 View 是根据数据库中的某些记录生成的。我首先生成记录的 JSON,将其保存在我页面的一个变量中,然后使用 JS 构建界面。 问题是记录包含用户生成的字段,因此应用
render :partial 仅在 escape_javascript 上生成一次 例如 $(document).ready(function(){ $("#addPers
当我通过 to_json 从 Controller 操作直接客户端发送集合时,如何转义集合? 当我说请求从 Controller 操作发送,然后直接发送到客户端(跳过预处理)时,它看起来像这样: AJ
我一直在看这个Railscast ,特别是这些代码行。 // views/reviews/create.js.erb $("#new_review").before(''); $("#reviews_
*(请注意,一切都在 Ajax 之外完美运行。可提交类可在更改时提交表单) 所以在这里我设置了一个基本示例,由于某种原因我无法让 显示在表单提交上。为了更好地解释,我将仅显示我的相关代码。 inde
使用 Rails 3.0,如果想通过 javascript 呈现部分内容(例如在 AJAX 调用中),可以像这样转义内容 $('#some_id').html(''); 它会起作用,因为 escape
我正在使用 Rails 3.1 和 sprockets 的东西。 我想使用 ERB 预处理一个 js 文件,然后使用 javascript_include_tag 将其包含在内。它是从代码生成的,所以
我是一名优秀的程序员,十分优秀!