いくつかの値を渡すのに問題があります。
私はこの構造を持っています。問題が何であるかを理解しようとしているので、今は非常に単純です。
私が望むのは、 JSON データをexamples
やのような変数に入れることですchapters
。ファイルからの情報は完全に読み込まれます。alert
またはで確認できますconsole.log
。
// global variables
var JSONObject = false;
var chapters = false; // or Array depends on what I'm trying
var examples = false; // or Array depends on what I'm trying
var ajax_request = false;
var url_json = "js/database.json";
// start the process, for now
load_json_data();
console.log( JSONObject ); // outputs false
function load_json_data() {
// new request
ajax_request = new XMLHttpRequest();
// do the request
ajax_request.open( "GET", url_json, true );
ajax_request.send( null );
// function to parse the JSON data
ajax_request.onload = parse_json;
// return value
return true;
}
function parse_json() {
if ( ajax_request.readyState === 4 && ajax_request.status === 200 ) {
// parse the JSON file
JSONObject = JSON.parse( ajax_request.responseText );
// do something with the loaded data
temp();
}
return true;
}
function temp() {
console.log( JSONObject ); // outputs the JSON content if async = true
// with async false, it never reaches this function
// here all the information is available and chapters and sections have values
chapters = JSONObject.chapters;
examples = JSONObject.examples;
}
別の名前で呼ばれるこの関数は、JSON ファイルから取得した値を登録して、ページ内にコントロールを作成するtemp
などの他の関数で使用するという考え方です。別個の関数である必要はありません。同じ関数に含まれている可能性がありますが、できる限りきちんといくつかのことを試していたので、現在は含まれています。construct_select()
select
parse_json()
temp()
load_json
、parse_json
、および中央関数から必要なその他の関数を実行したいのですが、そのためには、それらの関数が値を他の変数に渡す必要があります。
通常、スクリプトのフローを制御し、すべての決定を下す関数を 1 つ用意しようとします。残りの関数は、必要な処理を実行し、必要に応じて状態 (true/false) または値を返します。
適切に説明したことを願っていますが、さらに情報が必要な場合はお知らせください。
更新 1:
問題は非同期プロセスに関連していると思いますがonload
、解析関数を呼び出す前に使用して解決されているはずではありませんか? また、async パラメータを false に変更しても改善しません。
更新 2:
関数がイベント リスナーによって呼び出された場合、または実行された場合、JSONObject
その関数で使用できます。方法や理由はまだわかりませんが、最終的にやりたいことに役立ちます。1 つの関数でフローを制御し、何を実行するかを決定することはまだ許可されていませんが、それをイベントに任せることはできます。リスナーによってトリガーされるのではなく、関数で使用できるグローバル変数に値を渡すことができるかどうかをまだ調べています。