2016-07-17 10 views
0

私のjsonファイルは "public"フォルダにあります。私のコードは次のようにアクセスします:私のRailsビューの1つはd3.jsonファイルにアクセスできますが、他のビューはアクセスできません。

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

私はjsonにアクセスする必要がある2つのビューがあります。ビューの1つ、sessions/new.html.erbはそれにアクセスできますが、他のビューはアクセスできません。

ネストされたモデルではないものは、user.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"を試してみると、ページのリロードだけで動作します。

何が起こっているのですか?

答えて

0

us-states.jsonは相対パスです。つまり、現在のページのURLを基準にしています。代わりに絶対パスを使用して、すべてのページで同じURLが使用されていることを確認することができます。あなたのケースでは/us-states.jsonになる必要があると思います。

+0

ありがとうございます。しかし、私が試してみると、ページが最初に読み込まれたときではなくページがリロードされても機能します。 – jslutzky

+0

キャッシュをクリアしようとしましたか?また、 'turbolinks'を使用しますか(この場合、javascriptを調整する必要があります)? – lest

+0

私はターボを使っています。私は必要があるかどうかわからない。それを取り除くのが助けになるのだろうか? – jslutzky

0

私はこの問題を解決することができました。私の機能は$(document).ready()ブロック内にありました。私はそのブロックの外で関数を呼び出し、そこに呼び出すのではなく、html.erbビューの<script>タグの中に呼びました。これで正しく動作します。

@lestが示唆するように、パスの前にスラッシュを入れなければなりませんでした。

関連する問題