つぶやきの情報を含むJSONファイルがあり、各ツイートの生のテキストを配列に取り込もうとしています。セットには95のつぶやきがあるので、配列には95個のアイテムが必要です(各アイテムはツイートの生のテキストを含む文字列になります)。jQueryのスコープ - なぜ配列が設定されていないのですか?
は、ここに私のコードです:
// Declaring array to hold tweets
allTweets = new Array();
$(document).ready(function() {
// Going through JSON file to get raw text from tweets
$.getJSON("TwitterTweets17.json", function(data) {
$.each(data, function(key, val) {
$.each(val, function(key2, val2) {
// Only getting raw text from tweets, no other info
if (key2 === "text") {
allTweets.push(val2);
}
});
});
});
console.log("allTweets length: " + allTweets.length);
for (i = 0; i < allTweets.length; i++) {
console.log(allTweets[i]);
}
})
私はこのコードを実行すると、私はコンソールでこの出力を得る:これは私にはあまり意味がありません
allTweets length: 0
を。私はallTweets配列を私ができる限りグローバルに宣言しましたが、配列が移入されているようには見えません。 console.logとforループを$(document).ready関数の外に移動しても、出力は変更されません。なぜこうなった?
ありがとうございます。
編集:
// Declaring array to hold tweets
allTweets = new Array();
$(document).ready(function() {
// Going through JSON file to get raw text from tweets
$.getJSON("TwitterTweets17.json", function(data) {
$.each(data, function(key, val) {
$.each(val, function(key2, val2) {
// Only getting raw text from tweets, no other info
if (key2 === "text") {
allTweets.push(val2);
}
});
});
console.log("allTweets length: " + allTweets.length);
for (i = 0; i < allTweets.length; i++) {
console.log(allTweets[i]);
}
});
})
そして、これはおおよそのコンソール出力です:
allTweets length: 95
RT @1942bs: "why don't y'all just give Trump a chance"
RT @JuddLegum: Trump said the exact same thing and was elected president.
...
この質問をより徹底するためには、ここでは私が欲しいの出力が得られないことに、代替のコードがあります等々。基本的にはすべてのつぶやきを表示します。だから私は私の質問は、なぜこの場合は動作しますが、前のことではないと思いますか?
jsonデータも表示してください。 – Shibi
申し訳ありませんが、私の質問は十分にはっきりしていないと思います。私はJSONの問題だとは思っていません。私の(編集した)答えでは、正しい出力が得られるケースを示しているからです。私の質問です:なぜ、2番目のケースは機能しますが、最初のケースは機能しませんか?ありがとう。 –
最初の例では、JSONがロードされて配列が移入された後、_success_ハンドラにツイートが表示されます。次に、GetJSONを呼び出すと成功ハンドラが配列に値を設定しますが、ツイートが実際にロードされて配列にプッシュされる前に、すぐにallTweetsの出力を表示し続けます。 – Mun