1

我正在尝试将 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比较陌生,所以我可能会犯一个菜鸟错误,但是,不管它是什么,我都看不到!

在此先感谢您的帮助!

4

1 回答 1

3

问题是带有一个参数的 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
} );
于 2013-01-30T16:22:57.213 回答