我尝试使用此代码使用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:
之上<%= include_gon %>
控制器动作:
gon.json_data = JSON.parse(File.read('json path'))
js file:
console.log(gon.json_data);
Obs 1:这种使用gem gon的方法使得app 更慢当你必须在rails中读取数千条记录的数据库时(5.5k并且每次加载花费500ms!)< / p>
Obs 2:当你使用javascript访问本地文件时,我想象安全问题,但似乎我是世界上唯一一个有这个&#34;问题的人#34; ?
答案 0 :(得分:1)
如果您想阅读.json并将其提供给网络服务器,并因此提供给客户端,则应将其放在public/
- 文件夹中。除非另有路由,否则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);
});
});