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, 10 months ago

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

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

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

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

时崎Area answered 10 years, 10 months ago

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

tetsu answered 10 years, 10 months ago

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

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

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

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

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

evagun answered 10 years, 10 months ago

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

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

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

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

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

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

tntnan answered 10 years, 10 months ago

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

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

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

但是换了浏览器就没了;

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

莱茵的黄金 answered 10 years, 10 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, 10 months ago

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

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

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

wealth answered 10 years, 10 months ago

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

Yhrio answered 10 years, 10 months ago

Your Answer