【问题标题】:load JSON from rails controller to d3 .defer() function within javascript file将 JSON 从 rails 控制器加载到 javascript 文件中的 d3 .defer() 函数
【发布时间】:2015-02-11 22:42:22
【问题描述】:

我有一个使用 d3 生成带有城市的地球仪的 rails 应用程序。目前,城市的数据位于名为 places.json 的静态 json 文件中。然后,places.json 文件将通过这个 sn-p 呈现给 assets/javascripts 中的其余 d3 代码

 queue()
.defer(d3.json, "/assets/world-110m.json")
.defer(d3.json, "/assets/places.json")
.await(ready);

我想用渲染动态 json 的控制器替换“/assets/places.json”文件。我目前正在运行控制器,并且我有一个发布请求,可以将 json 获取到下面的 javascripts 文件中。

$.post( "/teams/to_geo_json", function( data ) {
   alert( JSON.stringify(data) );
});

其中/teams/to_geo_json 是控制器的路径。但是,当我将控制器路径放入 .defer(d3.json, "/assets/places.json") 时,它不起作用,我不知道如何让 $.post("/teams/to_geo_json")... 调用与其余 d3.js 代码一起工作。

【问题讨论】:

  • 定义“不起作用”。控制台有错误吗?如果你这样做queue().defer(d3.json, "/teams/to_geo_json").await(ready); function ready(error, places) { console.log(error); },有什么错误吗?
  • 哇,你刚刚帮我解决了我的问题!

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


【解决方案1】:

事实证明,我在延迟中遇到了 404 错误。在我的路线中,我有一个

   post "/teams/to_geo_json" => "teams#to_geo_json"

在控制台中,它从 defer() 请求一个 get 方法。我将上面的路线更改为: 获取 "/teams/to_geo_json" => "teams#to_geo_json"

一旦我改变了,我仍然有问题,localhost:3000/teams/to_geo_json 会改为localhost:3000/teams/show/id,它认为to_geo_json 是它当然找不到的 id。所以它出错了。为了解决这个问题,我把

 get "/teams/to_geo_json" => "teams#to_geo_json"

上面

resources :teams, :only => [:index, :show] do
   resources :users, :path => :teammates, :as => :teammates, :controller =>    "teammates"
 end

在我的 routes.rb 文件夹中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2016-01-09
    • 2016-07-03
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多