escape_javascript正在删除尖括号 - 解决方案?

时间:2011-07-14 15:08:01

标签: javascript jquery ruby-on-rails-3 escaping

我正在使用rails 3 app(版本3.0.9)来使用AJAX和jQuery来流畅地处理用户帖子。我希望在帖子提交后刷新#users_info div。我可以让它工作,但div的内容不能正确呈现。具体来说,是create.js.erb中的jquery代码:

 $("#right_bar").html(
'<%= escape_javascript(render :partial => 'shared/user_info') %>'
 );

用户信息div输出结果:

 <div id=user_info> <h1>    
 <a href=/users/101>Example Usera> h1>  
 46 posts <br>  
 4 discussions <br> 
 Following 2 topics <br>    
 Joined 8 days ago.div>

注意escape_javascript函数如何删除html中结束标记上的所有前导尖括号(变为&gt;,变为h1&gt;)。如何强制escape_javascript避免这样做?我认为这是所有相关的代码,但如果需要可以发布更多。

更新

我想知道是否可能使用to_json是解决方案的一部分。代码:

&lt;%= escape_javascript((render:partial =&gt;'shared / user_info')。to_json)%&gt;

导致html标签没有被销毁。但是,我不知道如何从json转换回输出所需的html。只是觉得这可能是一个正确的开始,但我不知道如何完成它

3 个答案:

答案 0 :(得分:0)

您可能使用较旧版本的rails。 6月初的一个版本引发了这个问题。确保升级到您所在分支(2.3.12,3.0.9或3.1.0.rc4)中的当前版本,它应该可以正常工作。

答案 1 :(得分:0)

我找到了解决方案。只需将escape_javascript(内容)的内容包装在escape_javascript(“#{}”)中。

 $("#right_bar").html(
'<%= (escape_javascript("#{(render :partial => 'shared/user_info')}")).html_safe %>'
 );

我在末尾添加了html_safe,这样rails就不会使尖括号成为字面值。现在html标签正确完成,一切都在浏览器中正确呈现。

答案 2 :(得分:0)

试试这个:

$("#right_bar").html(
   "<%= escape_javascript(render :partial => 'shared/user_info') %>"
);