2017-01-08 14 views
0

これは初心者のJavaScriptメドラーであることを意味しています。私のHTMLでJavaScript配列 - 使用時に0の長さですが、Chromeで正しい長さが表示されます

arrayA = [ 
    { 
     "Key": "Key1", 
     "Value": { 
         "info1": "298431", 
         "info2": "55.035", 
         "info3": "11.375", 
        }, 
     "Name": "Key1" 
    } 
] 

私は(私は[]でarrayAを宣言してからデータを含むファイルを摂取するために$ .getJSONを使用して、私の実際のコードでは)次のデータをarrayAと呼ばれる配列を持っていますページには、スクリプトタグ/セクションがあり、そこに定義されています。 arrayAの後に、私は "stuff"を試して実行するfuncA()という関数を持っています。これには、例として "Key1"のインデックスを見つけることが含まれます。

console.logの行を常に0として報告しますが、Chromeのコンソールを使用して長さをチェックすると、正しい数のオブジェクト(8950)が報告されます。

何が問題なのかよく分かりません。潜在的に可変スコープか、arrayAが初期化され、データがロードされる方法?助けてもらえますか?完全のために

<script type="text/javascript"> 
var arrayA = []; 

$.getJSON('./source.json', function(data) { 
    arrayA = data;     
}); 

function funcA() { 
    //Do stuff to find indexOf "Key1" 
} 
</script> 

/D

+1

ロギングステートメントはどこですか?これはおそらく[非同期呼び出しの応答を返す方法]を助けます(http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – charlietfl

+3

あなたは 'funcA()'を使って/呼び出しますか?コードのその部分を表示してみませんか? –

+0

こんにちは、すべての可能性の迅速な応答に感謝します。私は順番に試して回答し、いくつかの要求に応じてより多くの情報で質問を更新します。ありがとう! – Daenous

答えて

2

問題は、いつfuncA()実行、データがまだ利用できない可能性が最も高いです。

この試してみてください。そして、あなたは注文物事が起こるれている表示されます

<script type="text/javascript"> 
var arrayA = []; 

$.getJSON('./source.json', function(data) { 
    arrayA = data;     
    console.log('Data was loaded', arrayA); 
}); 

function funcA() { 
    //Do stuff to find indexOf "Key1" 
    console.log('funcA() ran'); 
} 
</script> 

を。もちろん$.getJSONは非同期関数であるため、常に同じ順序で起こっていることに依存することはできません。したがって、グローバル変数を使用せずに、約束やコールバックを調べる必要があります。

+0

あまり説明はありません – charlietfl

+0

おそらく 'funcA();'をajaxコールバックの中に入れるのは便利な例です。 –

+0

あなたのアップデートでは 'funcA()'も呼び出されません – charlietfl

1

arrayAにデータを割り当てるのは、getJSONのコールバック関数がまだ完了していないことを最初に検査しているときです。データを操作する場合は、コールバック内でfuncAと呼ぶことができます。

$.getJSON('./source.json', function(data) { 
    arrayA = data; 
    funcA();     
}); 
関連する問題