js怎么读写本地json文件?


除了ie提供的activex方式,还有别的实现方法吗?

小弟在开发一个题库(上千道题目。只包含判断,单选,多选。单机运行,不需要联网,能够跨浏览器)

由于不是计算机专业,打算用简单一点的jquery+html来完成。现在想实现一个功能:曾经做对的题目,被随机抽到的概率低一些;曾经做错的题目,被随机抽到的概率高一些。所以要在本地存储记录答题情况的文件。


很感谢大家的回答。

我根本的需求是做一个单机版题库,并可以很轻易地复制或安装在别人的电脑上。对于编程语言,只稍微用过java,但要求对方电脑安装java,这样很麻烦。所以采用html方式,用浏览器做界面,这样对方电脑只要有浏览器就可以使用题库。但是题库运要能够本地存储,就像游戏的存档一样,所以在文件的读写操作方面出现了问题。开始问问题的时候考虑存档是json格式,但重点不是格式,重点是读写。

这几天发现store.js库( localStorage wrapper for all browsers without using cookies or flash. Uses localStorage, globalStorage, and userData behavior under the hood )但是有几个方法不太会

或者楼下所说.hta的方法(本质还是使用activex方式),对方是win系统就可以,即便没有安装ie。

jquery json JavaScript

asukahe 10 years, 2 months ago

https://github.com/nwjs/nw.js

浏览器不能官方地读写本地文件,除非你用各种旁门左道的hack方式。
考虑到笔者对前端叫熟悉,采用折衷的方法,你可以用node-webkit开发一个轻客户端。
需要Node.js的知识。

天体D孤云 answered 10 years, 2 months ago

把你的 .html 改成 .hta
然后就可以 直接读取本地文件了..

时崎Area answered 10 years, 2 months ago

ajax 访问就可以了
当然只能读,不能写。

tetsu answered 10 years, 2 months ago

干嘛写文件,写localStorage里就行,如果需要读写5M以上,可以github:localForage

心智健全萝莉控 answered 10 years, 2 months ago

JS是客户端语言,客户端语言根本就不能对本地硬盘的数据进行读写!!!

阿良良木火憐 answered 10 years, 2 months ago

把 json 作为一个全局变量不就可以了

evagun answered 10 years, 2 months ago

http://www.jb51.net/article/21449.htm

我觉得你是在找这种东西吧?这个我测过是可以的,你再把内容转换为json也一样。
你的问题核心就是怎么能够通过 浏览器操作读写本地文件 ,很多时候用的就是windows里面IE的FileSystemObject对象了。其实这个挺好用的,起码有IE的电脑都能够用上

其实浏览器操作本地文件归根到底是一个信任链的问题,你用IE信任了ActiveObject基本能实现你的要求了,多找找其他资料吧。

之外,其实我觉得在本地搭建一个小的webserver也是很简单的,直接用wamp一套都能一键搭建了,何苦用这么多乱七八糟的对象呢。。。

弄f@ck連 answered 10 years, 2 months ago

不管你是不是单机,既然用了网页,那么至少有个单机服务器吧?那存储在单机数据库不就得了?同样也是本地。如果你服务器是联网的,只是想让他们能离线单机使用,那么用网页做明显不智。网页网页,有网才有页。或者你只是觉得数据量太大,不想从网络下载,那是你多虑了,让服务器计算完了,给客户端反馈个结果就是了。数据量不大,计算量也不大。

tntnan answered 10 years, 2 months ago

你是http协议 还是 file协议访问?

http访问的话,可以直接 ajax 加载过来,这样能做到读文件,但是不能写;
file的话,chrome firefox 都不让ajax加载文件了;

存数据的话,可以用localstorge,cookie之类的;

但是换了浏览器就没了;

很想推荐你学些 Node.js,根据你的需求你只需要学下 http fs 模块就可以做到数据的持续化存储了,

莱茵的黄金 answered 10 years, 2 months ago

找到一个本地存储方法,store.js



 store.set(key, data[, overwrite]);//=== store(key, data);
store.setAll(data[, overwrite]);  //=== store({key: data, key2: data});
store.get(key[, alt]);            //=== store(key);


不过这三个函数的参数data[, overwrite]、data[, overwrite]、key[, alt]看不大懂
store.setAll(["w1","w2","w3"]) 这个方法存的data是"w1","w2","w3",那key是什么?
store.keys() //⇒["w1", "w2", "w3"] 这个方法返回所有key的数组,那么"w1","w2","w3"是可以?
store.has("w1"); //⇒true 这个方法,"w1"是key还是data?

冬瓜烂在春风里 answered 10 years, 2 months ago

上面的回答只考虑到了读json,没考虑到写json。单纯用js来控制读写是不可能的。这是因为浏览器出于安全考虑回限制js。楼主可以考虑node等服务器读写或者使用flash。

红豆黑米粥 answered 10 years, 2 months ago

我的答案是使用nodejs...
它有fs的模块,想怎么弄就怎么弄。
可能,你会说我偏题了,nodejs明明是后台的东西。但,我想问的是别人如何访问你的html呢?肯定也是通过搭建的服务器吧。。。

wealth answered 10 years, 2 months ago

浏览器没有访问本地文件的权限吧

Yhrio answered 10 years, 2 months ago

Your Answer