私のアプリケーションがしよう: 1.もっと闘争
準備div要素で処理された配列データを挿入する... ...の前に(JSONファイルを使用して) 3. 2.プロセス配列データをいくつかの配列を移入現在、これは手続き的な方法で構成されていますが、Pointyが指摘しているように(http://stackoverflow.com/questions/8377344/scope-of-javascript-array-differs-from-ie9-to-firefox-chrome/ 8377401#8377401)は、いくつかの非同期プログラミングによってそうしようとしています。私の現在の目標は、すべてのブラウザで適切に非同期にすることで動作させることです。
IE9ではアプリケーションはうまく動作しますが、FFやChromeではうまく動作しません。次の主な手順では、IE9はすべての配列内容を取り込み、保持します。 FFなど、人口はそれを失う。
//globally declare some arrays (used throughout the application)
function buildTree(id) {
$(document).ready(function() {
$.getJSON(JSONfile, function(data) {
$.each(data.person, function(i, xdata) {
//populate arrays with relevant data
}); //end of first $.each()
//check 1
}); //end of first getJSON
//check 2
$.getJSON(JSONfile, function(data) {
//check 3
$.each(data.person, function(i, xdata) {
//populate arrays with relevant data, using arrays from first read
}); //end of second $.each()
//check 4
}); //end of second getJSON
//check 5
//check 6
}); //end of document.ready
}
配列は罰金です:チェック1、3、4、6 配列は空です:私の不幸にパープレキシティを追加するには2、5
をチェックし、私はせずにdiv要素に配列をダンプすることを決定しました処理。私は誤ってアラートを残しました(= check5)。まだ配列が空であることを示していますが、次の行が実行されたとき(配列をDIVにダンプするとき)はすべて問題ありません。アラートをコメントアウトしてください:もう何もありません。
明らかに間違っていますか?
配列は2および5で空です。これらの位置はレディハンドラに属しているからです。 Ajaxレスポンスハンドラ(レディハンドラ内で作成されたAjaxリクエスト)は、レディハンドラの後に*実行されます。 –
2番目の「$」を動かしてみてください。最初の "$ .getJSON()"へのコールバックの中にコード全体を移動させます。あなたが好きであれば、コードクリーナーを少なくして、 "あまりにも"たくさんの機能を追加することができます。 – Pointy
Pointy、これは動作するように見えましたが、DIVを入力するコマンドの直前に警告を出すことに気づきました。私はそれが不適切にフォーマットされたかもしれない - Daveは、これが成功の機能であるべきであることに言及し、おそらく私はコンマか何かが欠けてい $ .each()... }); $ .getJSON()。。 ... }); });。。。 –