JQuery цикл JSON с интервалами

0

Я пытаюсь установить интервал между каждым элементом JSON. Этот JSON напечатает на странице некоторые твиты, взятые из конечной точки API.

Проблема в том, что нижняя функция не работает. По некоторым причинам он ждет количество времени, которое я объявлял в функции синхронизации, но после того, как он ждал, он печатает последний твит в JSON вместо того, чтобы печатать их один за другим с объявленным интервалом.

Я пробовал с setTimeout и setInterval без везения.

Цель состоит в том, чтобы показать твиты каждые TOT секунд от ответа JSON.

Вот конечная точка 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);
            });
        });

    });
}
Теги:
loops

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 а не к отдельному элементу.

EDIT Просто посмотрел ответ от вашего API.

Я думаю, у вас слишком много $.each. Удалите второй. v не является массивом объектов, это объект, за которым вы находитесь.

$.each(json.twitter, function(index,element){
  setTimeout(function(){

    console.log(element.twitt);

  }, tweetSwitcher * index); 
});
  • 0
    Без изменений вообще. Можете ли вы предоставить пример кода? Я немного потерян здесь
  • 0
    @DiegoPucci - кажется, вы повторяли слишком много раз. Проверьте мое обновление.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню