登录

javascript - 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。


2015.3.21更新
感谢大家的解答,最后还是选择使用.hta和activex的方式,简单有效,足够满足需求。

# JavaScript
PHPzPHPz2206 天前1377 次浏览

全部回复(15) 我要回复

  • 阿神

    阿神2017-04-10 14:54:20

    让浏览器直接访问的最好方法就是把json弄成js文件~

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:54:20

    https://developer.mozilla.org/en-US/docs/Web/API/FileReader

    中文:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader

    回复
    0
  • 高洛峰

    高洛峰2017-04-10 14:54:20

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

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-10 14:54:20

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

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

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

    但是换了浏览器就没了;

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

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-10 14:54:20

    http://www.html5rocks.com/zh/tutorials/file/dndfiles/

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:54:20

    Ajax的XMLHttpRequest难道不可以吗?貌似只能读是吧?

    回复
    0
  • 高洛峰

    高洛峰2017-04-10 14:54:20

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

    回复
    0
  • ringa_lee

    ringa_lee2017-04-10 14:54:20

    找到一个本地存储方法,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?

    回复
    0
  • 迷茫

    迷茫2017-04-10 14:54:20

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

    回复
    0
  • 怪我咯

    怪我咯2017-04-10 14:54:20

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

    回复
    0
  • 取消回复发送