为什么我的一个Rails视图可以访问我的d3.json文件,但另一个视图不能?

时间:2016-07-17 22:17:30

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

我的json文件位于“public”文件夹中。我的代码以这种方式访问​​它:

d3.json("us-states.json", function(json) {

我有两个需要访问json的视图。其中一个视图sessions / new.html.erb可以访问它,但另一个视图不能访问它。

不能是嵌套模型的用户.maps。在控制台中,我明白了:

GET http://localhost:3000/users/1/maps/us-states.json 404 (Not Found)

为什么不像其他视图一样在“公共”文件夹中查找?

现在这里有些奇怪:我尝试了一点,并尝试改变道路:

  d3.json("../../../us-states.json", function(json) {

当我尝试时,首先我在控制台中得到它:

d3.tip.v0.6.3.js:225 Uncaught TypeError: Cannot read property 'tagName' of null

似乎与d3.tooltip有关。如果我删除了我的工具提示代码,我只会得到一个空白页面,没有控制台错误。

但是当我重新加载该页面时,它会找到我的JSON并且有效!

这没用,因为我无法重新加载页面以使其在正常条件下正常工作。

总结一下:如果我尝试“us-states.json”,它就永远不会奏效。如果我尝试“../../../us-states.json”,它只适用于页面重新加载。

到底发生了什么事?

2 个答案:

答案 0 :(得分:0)

us-states.json是相对路径,这意味着它相对于当前页面网址。您可以使用绝对路径来确保在所有页面上使用相同的URL。我想在你的情况下需要/us-states.json

答案 1 :(得分:0)

我设法让这个工作。我的功能在$(document).ready()块内。我把这个函数放在那个块之外,而不是在那里调用它,我在html.erb视图中的一些<script>标签内调用它,现在它正常工作。

正如@lest建议的那样,我还必须在路径前放一条斜线。