【问题标题】:Accessing JSON information from Rails in d3.js在 d3.js 中从 Rails 访问 JSON 信息
【发布时间】:2013-01-30 16:01:09
【问题描述】:

我正在尝试将 d3.js 合并到我的项目中,但无法弄清楚如何访问 JSON 对象,该对象由我的 Ruby on Rails 后端提供。

这是我的控制器代码:

class CoursesController < ApplicationController
respond_to :html, :json

def course
  @course = Course.find(params[:id])
  respond_with @course do |format|
    format.html
    format.json {render json: @course}
  end
end

我一直在尝试在控制台和我的视图中找出如何访问这些信息。 (顺便说一句,如果我废弃了 respond_with 块,只保留渲染 JSON 块,我可以看到 JSON 对象实际上是一个响应对象)。

这是我一直在尝试的(在视图中):

<%= javascript_tag do %>
  var data  = d3.json('<%= @course %>');
  console.log(data);
<% end %>

这会返回一个对象,但是对象是未定义的,所以当我调用时:

dataset[0].course.course_name;

我收到以下错误:

TypeError: Cannot read property 'course' of undefined

我还在控制台中尝试过类似以下的操作:

var url = '/courses/1';
var dataset = d3.json(url);
dataset[0].course.course_name; 

但得到同样的错误。

我对js比较陌生,所以我很可能会犯一个菜鸟错误,但是,不管它是什么,我都看不到!

提前感谢您的帮助!

【问题讨论】:

    标签: javascript ruby-on-rails json d3.js


    【解决方案1】:

    问题是带有一个参数的 d3.json 函数 (https://github.com/mbostock/d3/wiki/Requests#wiki-d3_json) 返回请求。然后您必须发出该请求。

    “典型”用途是有第二个参数,带有回调函数。这是一个异步回调,因此您不能将返回值分配给 var。

    这是我的建议:

    var url = '/courses/1';
    d3.json( url, function( error, data ) {
        console.log( data );
        // do all actions required now that the data is retrieved
    } );
    

    【讨论】:

    • 非常感谢 - 这让我快疯了!
    猜你喜欢
    • 2015-07-14
    • 2018-11-13
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多