为什么在视图中解析时,我的嵌入式ruby json字符串是用html实体编码的?

时间:2014-07-26 22:51:11

标签: javascript ruby-on-rails json model-view-controller

我创建了一个rails操作,该操作向服务发出GET请求,然后将响应作为@job_data传递给视图。代码在检索响应时工作正常,并且我已经验证了json对象看起来是正确的。

def show
    @url = URI.parse(@@jobs_base_url + "/" + params[:id] + "?TestMode=true")

    req = Net::HTTP::Get.new(@url.to_s)
    res = Net::HTTP.start(@url.host, @url.port) {|http|
        http.request(req)
    }
    @job_data = HTMLEntities.new.decode res.body
end

但是,我尝试使用这个json对象做一些javascript来操作DOM元素。我试图将脚本插入到html中以使用json对象执行非常基本的操作,但似乎无法正确传递:

<script type="text/javascript" charset="utf-8">
$(function() {
    var $data = <%= @job_data %>;
    $('#jobtable').append($data.Id);

当我调试页面时,我看到字符串中的所有实体都被编码(例如&amp; quot而不是引号)。我已尝试使用HTMLEntities对字符串进行去实体化,如上面代码中的操作,但它没有效果,就像我将@job_data设置为:

@job_data = res.body

任何人都可以解释编码发生的位置以及我如何解决这个问题?问题是动作还是视图中的javascript?什么是将json字符串/对象从动作中的响应传递到视图中的javascript的首选方法?

1 个答案:

答案 0 :(得分:1)

这里已经回答: Ruby json gem is encoding html entities

诀窍是在视图的嵌入式ruby中使用raw以避免编码:

var $data = <%= raw @job_data %>;