我正在尝试做一件简单的事情:
_flash.js.erb:
$("#alerts").append("<%=j render :template => "shared/_flash.html.erb" %>");
注意<%=j...,它转义了 javascript。
_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
;你是JSON-escaping它。
您可以为某些内容添加别名,就像 j
是 json_escape
的别名一样;它只是一个帮助者。
关于javascript - Rails 3 - 在 JavaScript 响应中转义部分生成的 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8957548/