rails 3 - 在javascript响应中转义部分生成的html

Posted

技术标签:

【中文标题】rails 3 - 在javascript响应中转义部分生成的html【英文标题】:rails 3 - escaping partial's generated html in javascript response 【发布时间】:2012-01-21 23:13:36 【问题描述】:

我正在尝试做一件简单的事情:

_flash.js.erb:

$("#alerts").append("<%=j render :template => "shared/_flash.html.erb" %>");

注意

_flash.html.erb:

<% flash.each do |key, value| %>
  <div class="alert-message top <%= "#key" %> fade in" data-alert="alert">
    <a class="close" href="#">x</a>
    <p><%=j value %></p>
  </div>
<% end %>

但是,当调用 _flash.js.erb 时,会附加如下内容:

$("#alerts").append("  \u003Cdiv class=alert-message top warning fade in data-alert=alert\u003E
    \u003Ca class=close href=#\u003Ex\u003C/a\u003E
    \u003Cp\u003ELooks like you have already linked with Facebook.\u003C/p\u003E
  \u003C/div\u003E
");

没有 javascript 转义,响应是这样的:

$("#alerts").append("  <div class="alert-message top warning fade in" data-alert="alert">
    <a class="close" href="#">x</a>
    <p>Looks like you have already linked with Facebook.</p>
  </div>
");

在第一个响应中,转义了太多东西。在第二个响应中,没有任何东西被转义,双引号把事情搞砸了。

在 Rails 3 中以稳健的方式实现上述目标的推荐方法是什么?

【问题讨论】:

原来使用 escape_javascript(...) 而不是 会产生预期的结果。奇怪 - 认为他们是同一件事。我想我将不得不解决更多冗长的问题。有没有更简洁的替代方案或使 起作用的方法? 【参考方案1】:

请改用escape_javascript;你是JSON-escaping它。

你可以用同样的方式给某个东西起别名,jjson_escape 的别名;它只是一个帮手。

【讨论】:

有人需要修复这些文档然后 --api.rubyonrails.org/classes/ActionView/Helpers/…

以上是关于rails 3 - 在javascript响应中转义部分生成的html的主要内容,如果未能解决你的问题,请参考以下文章

使用rails在javascript响应中渲染Haml文件

在 Rails 查询中转义引号

在控制台/rake/rails 中转义确保

在rails中转义SQL LIKE的查询

在 JavaScript 中转置二维数组

有没有办法缩小 Rails UJS 响应?