0

我正在尝试在每个 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);
            });
        });

    });
}
4

1 回答 1

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); 
});
于 2013-11-10T13:32:16.813 回答