在RJ ERB模板中输出HTML

时间:2011-08-26 12:20:45

标签: javascript ruby-on-rails ajax prototypejs

这可能真的很傻,但我根本无法让它工作......

我有vacation.js.erb,它会在ajax调用完成后生成一些javascript来更新页面。该文件的来源如下所示:

$('semantic').replace('<div id="semantic"></div>');
<%
    html = '<table class="ajax">'
    html += "<tr><td>EU - 27</td><td>#{@eu.value.value} days</td></tr>"
    html += "<tr><td>#{@source.location.value}</td><td>#{@source.value.value } days></td></tr>" unless @source.location.value.blank?
    html += "<tr><td>#{@cv.country.name}</td><td>No Data Available</td></tr>" if @source.location.value.blank?
    html += "<tr><td>#{@target.location.value}</td><td>#{@target.value.value } days></td></tr>" unless @target.location.value.blank?
    html += "<tr><td>#{@vacancy.country.name}</td><td>#{@target.value.value } days></td></tr>" if @target.location.value.blank?
    html += "</table>"
%>
$('semantic').insert('<%= escape_javascript(html) %>');

我可以通过浏览器仔细查看代码,但最后一行是给我带来麻烦。它将html中的东西编码为html实体,我不想要这个,因为它打破了javascript。 Fiddler的回答如下:

  。

$( '语义')代替( '');   $( '语义')插入('&LT;表   class = \“ajax \”&gt;&lt; tr&gt;&lt; td&gt; EU -   27 LT; / TD&GT;&LT; TD&GT; 28   天&LT; / TD&GT;&LT; / TR&GT;&LT; TR&GT;&LT; TD&GT; GB&LT; / TD&GT;&LT; TD&GT;否   可用数据&lt; / td&gt;&lt; / tr&gt;&lt; tr&gt;&lt; td&gt; United   英国及LT; / TD&GT;&LT; TD&GT; 29   天&GT;&LT; / TD&GT;&LT; / TR&GT;&LT; /表&gt;');

如何阻止页面编码html变量? 我尝试使用 &lt;%! html%&gt; ,但不返回任何内容。

1 个答案:

答案 0 :(得分:3)

修复它,解决方案是

$('semantic').replace('<div id="semantic"></div>');
<%
    html = '<table class="ajax">'
    html += "<tr><td>EU - 27</td><td>#{@eu.value.value} days</td></tr>"
    html += "<tr><td>#{@source.location.value}</td><td>#{@source.value.value } days></td></tr>" unless @source.location.value.blank?
    html += "<tr><td>#{@cv.country.name}</td><td>No Data Available</td></tr>" if @source.location.value.blank?
    html += "<tr><td>#{@target.location.value}</td><td>#{@target.value.value } days></td></tr>" unless @target.location.value.blank?
    html += "<tr><td>#{@vacancy.country.name}</td><td>#{@target.value.value } days</td></tr>" if @target.location.value.blank?
    html += "</table>"
%>
$('semantic').insert('<%=raw html  -%>');

在此处找到解决方案:Disable HTML escaping in erb templates