2

我是使用 JSON 的新手。

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

所以我花了一些时间编写一个脚本,将我现有的论文文件翻译成一个包含我所有记录的 paper.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 文件吗?

4

1 回答 1

3

普通浏览器 JavaScript 是单线程的。正是因为无限while永无止境,JavaScript 引擎永远无法处理调用的成功回调$.getJSON。您的浏览器唯一的 JS 线程永远处于循环状态,并且永远不会移动到回调。

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

于 2012-05-25T18:32:36.330 回答