我正在使用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。只是觉得这可能是一个正确的开始,但我不知道如何完成它
答案 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') %>"
);