【问题标题】:escape_javascript is removing angle brackets - Solutions?escape_javascript 正在删除尖括号 - 解决方案?
【发布时间】:2011-10-05 10:41:14
【问题描述】:

我正在配备一个 rails 3 应用程序(版本 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 中结束标记上的所有前导尖括号(变为 a>,变为 h1>)。如何强制 escape_javascript 避免这样做?我认为这是所有相关代码,但如果需要可以发布更多。

更新

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

'shared/user_info').to_json) %>

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

【问题讨论】:

  • 你的意思是它正在删除前导尖括号。

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


【解决方案1】:

您可能使用的是旧版本的 Rails。 6 月初发布的版本导致了这个问题。确保升级到您所在分支(2.3.12、3.0.9 或 3.1.0.rc4)中的当前版本,它应该可以工作。

【讨论】:

  • 使用版本 3.0.9 -- 我是否需要更新特定的 gem 才能使用 escape_javascript?
【解决方案2】:

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

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

我在末尾添加了 html_safe,这样 rails 就不会使尖括号变成文字。现在 html 标签可以正常通过,并且所有内容都可以在浏览器中正常呈现。

【讨论】:

    【解决方案3】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多