14

以下代码行:

$("#comments_<%=@comment.post.id %>").append("<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }) %>");

应该在comments_xx div标签内插入部分html。发生的事情是插入了部分内容但没有解释为 html,我的意思是,我没有插入具有正确格式的评论,而是在网页中看到了整个代码:

示例(这是它在网页中插入的方式):

1 Comment
<div id=comment_5_34> <span class=dateandoptions> Posted less than a minute ago<br/> 
<a href=/comments/34/5 data-method=post data-remote=true rel=nofollow>Deletea> span>
<p><b>otra pruebab> wrote:p> <br/> <p><b> Webpage:b>asss.comp> <br/> <p class=comment-body>heeyeyeyyhep>div>

Thanks for commenting!

如果我分析插入的 javascript 代码,我会得到类似这样的东西(我使用 firebug 扩展来查看它):

/* Add the new comment to the bottom of the comments list */
$("#comments_5").append("&lt;div id=comment_5_34&gt;    &lt;span    class=dateandoptions&gt;        Posted less than a minute ago&lt;br/&gt;        &lt;a href=/comments/34/5 data-method=post data-remote=true rel=nofollow&gt;Deletea&gt;    span&gt;    &lt;p&gt;&lt;b&gt;otra pruebab&gt; wrote:p&gt;    &lt;br/&gt;     &lt;p&gt;&lt;b&gt; Webpage:b&gt;asss.comp&gt;     &lt;br/&gt;    &lt;p class=comment-body&gt;heeyeyeyyhep&gt;div&gt;"); 

最后,这是我要插入的部分代码:

<div id="comment_<%=comment.post.id%>_<%=comment.id%>">
<span class="dateandoptions">
    Posted <%= time_ago_in_words(comment.created_at) %> ago<br/>
    <%= link_to 'Delete', {:controller => 'comments', :action => 'eliminar', :id => comment.id, :post_id => comment.post.id}, :method => :post, :remote => true %>
</span>
<p><b><%= comment.user_name %></b> wrote:</p>
<br/>
<% if comment.web_page != nil %> <p><b> Webpage:</b><%= comment.web_page %></p> <% end %>
<br/>
<%= content_tag(:p, comment.contenido, :class => "comment-body") %>
</div> 

希望我能很好地解释自己!

在此先感谢您的帮助。

4

3 回答 3

9

我找到了解决方案!只需在 #{ } 中包含 rails 代码:

$("#comments_<%=@comment.post.id %>").append("<%= escape_javascript("#{render :partial => 'posts/comment', :locals => { :comment => @comment }}").html_safe %>");
于 2011-07-05T09:30:02.393 回答
3

几天前我遇到了类似的问题。看起来您正在与确保 HTML 输出安全的 Rails 发生冲突。

尝试将 .html_safe 添加到 escape_javascript 的末尾:

<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }).html_safe %>

我目前无法检查,但如果这是由与我的问题相同的问题引起的,它应该对你有用。

于 2011-07-04T14:02:39.577 回答
0

我尝试了SaucyK的解决方案,这似乎是可行的方法,但我的浏览器中仍然呈现出奇怪的输出。

所以现在代码行(正如 SaucyK 建议的那样):

$("#comments_<%=@comment.post.id %>").append("<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }).html_safe %>");

这就是我现在在浏览器中得到的:

Posted less than a minute ago
Deletea> span>

diego probandob> wrote:p>

Webpage:b>www.toteria.comp>

pruebaaaap>div>

如果我查看由 rails 和 Jquery 生成的最终 html 代码,我会得到:

<div style="" id="comment_5_40">   
<span class="dateandoptions">        Posted less than a minute ago<br>        <a href="/comments/40/5" data-method="post" data-remote="true" rel="nofollow">Deletea&gt;    span&gt;    <p><b>diego probandob&gt; wrote:p&gt;    <br>     </b></p><p><b><b> Webpage:b&gt;www.toteria.comp&gt;     <br>    </b></b></p><p class="comment-body"><b><b>pruebaaaap&gt;div&gt;</b></b></p></a></span></div></div>

我写的评论是

diego probando wrote:

Webpage:www.toteria.com

pruebaaaa

当我刷新网页时(所以评论是通过 rails 而不是通过 Javascript 引入的)一切都很好。

因此,正如您在开始时看到的那样,代码被正确解释,但在某些地方,不是得到一个'我得到>,或者不是得到我得到b>。

它可以与方法 escape_javascript 相关吗?我明白,如果我不想让 javascript 尝试解释我的 ruby​​ 代码,无论如何都是有必要的。

我插入的部分代码仍然与第一篇文章中的相同!。

感谢您的回答,对不起,我必须回答这个原因,但是当我写这个问题时,我没有在 stackoverflow 中注册。

于 2011-07-04T19:01:21.597 回答