2

JSONの使用は初めてです。

Web ページに、数百レコードの小さなデータベースを表形式で表示したいと考えています。データを 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が初めてです。ライブラリを使用せずにこれを行う方が快適だと思います。一度に1つの新しいことで十分です。jQueryなしでJSONファイルを簡単に操作できますか?

4

1 に答える 1

3

通常のブラウザの JavaScript はシングルスレッドです。まさに無限が終わらないためwhile、JavaScript エンジンは呼び出しの成功コールバックを処理できません$.getJSON。ブラウザの唯一の JS スレッドは永遠にループし続け、コールバックに移動することはありません。

解決策: ループを削除し、現在無限ループの後にあるコードを$.getJSONコールバックに移動する必要があります。

于 2012-05-25T18:32:36.330 に答える