使用JSON文件在javascript中持久存储小型数据库

时间:2012-05-25 18:28:22

标签: javascript json persistent-storage

我是JSON的新手。

我希望我的网页能够在表格中显示几百条记录的小型数据库。为了避免将我的数据放入MySQL数据库或类似的东西的麻烦,我想我会从JSON文件中读取我的数据,并将其写入JSON文件,这相当于我的方便,持久的存储数据库在我的网站上。

所以我花了一些时间编写一个脚本,将我现有的论文文件翻译成一个包含我所有记录的papers.json文件。它看起来像:

[
  {"title" :  "IEEE Standard for Local and Metropolitan Area Networks: Overview and Architecture",
   "authors" :  "IEEE",
   "pub" :  "IEEE 802-2001 standard",
   "datepub" :  "2001",
   "keywords" :  "MAC",
   "dateread" :  "200309",
   "physloc" :  "box i",
   "comment" :  "Indicates how you can manage addresses assigned to you by IEEE."
  },
  {"title" :  "A framework for delivering multicast messages in networks with mobile hosts",
   "authors" :  "A. Acharya, B. R. Badrinath",
   "pub" :  "Mobile Networks and Applications v1 pp 199-219",
   "datepub" :  "1996",
   "keywords" :  "multicast mobile MH MSS",
   "dateread" :  "",
   "physloc" :  "box a",
   "comment" :  ""
  },

    <hundreds more similar papers records here...>

  },
  {"title" :  "PiOS: detecting privacy leaks in iOS applications",
   "authors" :  "M. Egele, C. Kruegel, E. Kirda, G. Vigna",
   "pub" :  "NDSS 2011",
   "datepub" :  "2011",
   "keywords" :  "iOS app location leakage",
   "dateread" :  "",
   "physloc" :  "box e",
   "comment" :  "discussed at Latte"
  }
]

这是我用来阅读它的javascript代码。 (我还没有编写记录的写出,因为读取不起作用。)

var pdb = []; // global

var doneReading = false; //global

$(document).ready(function() {
        $.getJSON('papers.json',function(data) {
            pdb = data;
            doneReading = true;
        });

        while (!doneReading) {}

        alert("finished assignment of JSON to pdb"+" "+typeof pdb); 
        //alert(pdb[0].title);
        console.log(pdb[2]);
        //setup();
});

脚本永远挂在while循环中。为什么?

我也是jQuery的新手。如果不使用图书馆,我会觉得这样做更舒服,一次一件新事物对我来说足够了。可以在没有jQuery的情况下轻松操作JSON文件吗?

1 个答案:

答案 0 :(得分:3)

普通浏览器JavaScript是单线程的。准确地因为无限while永远不会结束,JavaScript引擎永远不会处理$.getJSON调用的成功回调。您的浏览器唯一的JS线程将永远循环,并且永远不会转移到回调。

解决方案:您应该消除循环并将当前在无限循环之后的代码移动到$.getJSON回调中。