Rails是否可以防止通过javascript读取本地json文件?

我正在尝试使用此代码使用javascript读取json文件:

$.getJSON("app/helpers/data.json", function (data) { $.each(data, function (index, value) { console.log(value); }); }); 

但是我从浏览器中获得的是:

获取http:// localhost:3001 / app / helpers / data.json 404(未找到)

他们总是理解搜索url路径而不是代码文件夹中的文件路径

当我尝试读取控制器时,我收到了正确的数据:

 @file = JSON.parse(File.read('app/helpers/data.json')) {"list"=>[{"label"=>"lbl1", "category"=>"cat1", "desc"=>"desc1"}, {"label"=>"lbl2", "category"=>"cat1", "desc"=>"desc2"}, {"label"=>"lbl3", "category"=>"cat1"}]} 

不太好的解决方案:

我可以在js文件中显示这个json的唯一方法是在控制器中分配变量并使用gem gon将此变量发送到js文件

在头部application.html.erb之上:

  

控制器动作:

 gon.json_data = JSON.parse(File.read('json path')) 

js文件:

 console.log(gon.json_data); 

Obs 1:这种使用gem gon的方法会让你的应用程序变得更慢,因为你必须在rails中读取数千条记录的数据库(每次5.5k并花费500ms来加载它!)

Obs 2:我想象当你使用javascript访问本地文件时的安全问题 ,但似乎我是世界上唯一有这个“问题”的人?

如果您想要读取.json并将其提供给Web服务器,从而使其可用于客户端,则应将其放在public/ -folder中。 除非另行路由,否则app/helpers文件夹通常不可供客户端使用。

然后从控制器,你可以做

 @file = JSON.parse(File.read('public/helpers/data.json')) 

在这里,您将从浏览器访问它

 $.getJSON("helpers/data.json", function (data) { $.each(data, function (index, value) { console.log(value); }); });