我有一个JSON文件,其中包含一组推文的信息,我正在尝试使用每条推文的原始文本填充数组。集合中有95条推文,因此数组中应该包含95个项目(每个项目都是一个包含推文原始文本的字符串)。
这是我的代码:
getWod(): void {
let id;
this.route.params.forEach((params: Params) => {
id = +params['id'];
})
this.wodService.getWod(id).then(function(data){
this.wod = data;
});
}
当我运行此代码时,我在控制台中获得此输出:
// 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 数组声明为全局,但它似乎仍然没有填充数组。在$(document).ready函数之外移动console.log和for循环不会改变输出。为什么会这样?
提前致谢。
编辑:为了更全面地解决这个问题,这里是 提供我想要的输出的替代代码:
allTweets length: 0
这是近似的控制台输出:
// 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]);
}
});
})
等等。基本上它显示了所有的推文。所以我想我的问题是,为什么它在这种情况下起作用而不是之前的?
答案 0 :(得分:0)
因为getJSON是ajax调用,而它的同步XMLHttpRequest你可以把它关闭async:false把它放在代码上面。
$.ajaxSetup({
async: false
});
顺便说一下,它将全局异步所有的ajax调用。您可以使用$.ajax
代替async:false此调用只是这样。
$.ajax({
type:'GET',
url:'TwitterTweets17.json',
dataType:'json',
async:false,
success: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);
}
});
});
}
});