14

次のコード行:

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

comments_xx div タグ内にパーシャルを html として挿入することになっています。何が起こっているのかというと、パーシャルのコンテンツが挿入されますが、html として解釈されないということです。つまり、正しい形式でコメントを挿入する代わりに、Web ページにコード全体が表示されます。

例 (これは、Web ページに挿入する方法です):

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に違反しているようです。

escape_javascript の末尾に .html_safe を追加してみてください。

<%= 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

Webページを更新すると(コメントがJavascriptではなくレールを介して導入されるため)、すべて問題ありません。

したがって、冒頭でわかるように、コードは正しく解釈されますが、' I get > を取得する代わりに、または i get b> を取得する代わりに、いくつかの場所があります。

それはメソッド escape_javascript に関連できますか?? とにかく、javascript に自分の Ruby コードを解釈させたくない場合は、それが必要であることを理解しています..

挿入しているパーシャルのコードは、最初の投稿と同じです!.

回答ありがとうございます。申し訳ありませんが、なぜこれに返信する必要がありますが、質問を書いたときにスタックオーバーフローに登録されていませんでした。

于 2011-07-04T19:01:21.597 に答える