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); }); });