使用Javascript在rails app中通过POST发送富文本

时间:2014-03-05 20:01:11

标签: javascript jquery ruby-on-rails ruby json

我在APP A中有以下富文本:

一个漂亮的篮球

  • 因为我这么说
  • 因为我母亲这么说
  • 因为我的狗这么说

在index.html.erb中,可以通过product.body_html访问此富文本,我将其加载到名为myProduct的Javascript对象中:

var myProduct= new Object(); 
myProduct.desc ='<%= JSON.generate(raw(product.body_html), quirks_mode: true) %>';

然后我通过POST将此对象发送到APP B中的API,使用Javascript:

var url = appBURL + "/myapi/method";
  $.ajax({
      type: "POST",
      url: url,
      data: JSON.stringify(myProduct),
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(data){
        // data.desc should contain the same rich text
        $(".myDiv").html(data.desc);
      }
  });

我在应用A中得到了回复data.desc 应该包含相同的富文本。但是当我在data.desc内显示<div>时,我在屏幕上看到的是

"<p>A nice basketball</p> <ul> <li>because I say so</li> <li>because my mother says so</li> <li>because my dog says so</li> </ul>" 

我实际插入的<div>(即data.desc的内容)就是这个

"&lt;p&gt;A nice basketball&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;because I say so&lt;/li&gt;
&lt;li&gt;because my mother says so&lt;/li&gt;
&lt;li&gt;kjh&lt;/li&gt;
&lt;/ul&gt;"

APP A中的客户端正在添加这些引号。为什么呢?

如果我在APP A中添加如下描述:

myProduct.desc ='<%= raw(product.body_html) %>';

然后它适用于普通文本(并且它不会添加引号),但是只要我有富文本,它就会在运行javascript时产生语法错误。

1 个答案:

答案 0 :(得分:1)

在APP B中渲染文本时,请按以下方式渲染:

(CGI::unescapeHTML data.desc).html_safe