我正在尝试在每个JSON元素之间设置间隔。 此JSON将在页面中打印从API端点获取的一些推文。
问题是以下功能不起作用。由于某些原因,它会等待我在计时函数中声明的时间,但在等待之后,它会打印JSON中的最后一条推文,而不是按照我声明的间隔逐个打印它们。
我尝试了setTimeout
和setInterval
但没有运气。
目标是在JSON响应中每隔TOT秒显示一条推文。
以下是API端点:xxxx/tweets.php
这是我的功能:
function tweets() {
$.when(getData(tweetsEndpoint)).done(function(json) {
$.each(json.twitter, function(k, v) {
$.each(v, function() {
setTimeout(function() {
tweetId = v.id;
tweetName = v.nom;
tweetUser = v.lien_twitter;
tweetImg = v.image;
tweetDate = v.date;
tweet = v.twitt;
tweetAuthor = v.author_type;
if (tweetAuthor === 'user') {
console.log('user');
$('#p31_bubble_right').html('');
obj = $('#p31_bubble_right').append(makeTweet(k, tweetUser, tweetAuthor, tweet));
obj.fitText(7.4);
$('#p31_bubble_left').html('');
} else {
$('#p31_bubble_left').html('');
obj = $('#p31_bubble_left').append(makeTweet(k, tweetUser, tweetAuthor, tweet));
obj.fitText(7.4);
$('#p31_bubble_right').html('');
console.log('operator');
}
}, tweetSwitcher);
});
});
});
}
答案 0 :(得分:0)
$.each(json.twitter, function(k, v) {
$.each(v, function() {
// ^---- You need to use the index,element arguments
setTimeout(function() {
tweetId = v.id;
您没有将v
传递给第二个$.each
,或者至少,您仍在访问数组v
而不是单个项目。
编辑只是查看了API的响应。
我认为你的$.each
太多了。删除第二个。 v
不是一个对象数组,它是你追求的对象。
$.each(json.twitter, function(index,element){
setTimeout(function(){
console.log(element.twitt);
}, tweetSwitcher * index);
});