0

我目前正试图在我的一个控制器中返回多个 JSON 对象。

  @chromosomes = @organism.chromosomes.to_json
  @file_data = current_user.files.to_json
  respond_to do |format|
    format.html
  end

但是,当我这样做时,在前端:

 <%= @chromosomes %>

或者

  <%= @file_data %>

我没有得到 JSON 对象,而是将数据作为字符串获取,其中包含 "e 等内容。我尝试解析字符串,例如

console.log($.parseJSON("<%= @chromosomes %>"));

但它仍然无法正常工作。这是因为发回的请求是html吗?

谢谢!

4

4 回答 4

2

你的代码应该是这样的,

respond_to do |format|
    format.html index.html.erb
    format.xml  { render :xml => @organism.chromosomes) }
    format.json { render :json => @organism.chromosomes) }
end
于 2012-04-09T14:06:56.800 回答
0

问题最终在于 Rails 将 json 数据编码为字符串,这是默认设置。解决我使用的问题

 <%= @chromosomes.html_safe %>

在前端。可以在此处找到有关此的更多信息:

Rails 中奇怪的 JSON Javascript 问题

于 2012-04-09T14:53:23.450 回答
0

您只需要

render :json => @organism.chromosomes

通过查看您的编辑,我认为您想要的内容如下:

console.log($.parseJSON("<%= raw @chromosomes %>"));
于 2012-04-09T14:04:08.890 回答
0

这应该适用于 Rails 2,

console.log($.parseJSON(<%= @chromosomes.dump %>));

对于 Rails 3,

console.log($.parseJSON(<%= @chromosomes.dump.html_safe %>));

String#dump 转义字符并使 parseJSON() 工作。请注意,不需要引号。

于 2012-04-09T15:06:06.033 回答