JQuery цикл JSON внутри путаницы JSON - PullRequest
0 голосов
/ 17 ноября 2010

Я перебираю JSONP с JQuery, чтобы получить список имен пользователей.Затем я хочу отправить каждое имя пользователя через API Twitter, чтобы получить ряд данных (количество подписчиков и т. Д.).Тогда покажите все это вместе.Это часть гораздо большей «информационной панели», основанной на политических кандидатах.Поскольку код, который я написал, довольно

, я могу без проблем импортировать и перебирать этот первый JSONP.

Проблема возникает, когда я добавляю в Твиттер материал: результирующий код на самом деле загружает всю информацию пользователей, но делает это все сразу, просматривая и заменяя каждый идентификатор, пока он не достигнет нижней частисписок.Меня это смущает, потому что это происходит в оригинальном цикле .each.

Вот упрощенная версия кода:

var URL = "biglist.json"

$.getJSON(yqlURL, function(data) {

$.each(data.query.results.row, function() {

var name = this.col0
var twitter = this.col5

var li = $('<li>').html('<li>'+name+'<li>Twitter ID: @'+twitter+'<span class="tweetdisplay"></span>');

var followers="http://api.twitter.com/1/users/show.json?screen_name="+twitter+"&callback=?"

$.getJSON(followers, function(tweets) {

$('.tweetdisplay').html('<li>twitter followers: ' +tweets.followers_count);

});

$('#result ul').append(li);

});
});

Я почти уверен, что упускаю что-то действительно простое, ноЯ определенно скучаю по этому.Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 17 ноября 2010

Полагаю, проблема в том, что у вас внутренний $.getJSON() асинхронный вызов. Он сработает сразу же, не дожидаясь ответа. Затем, всякий раз, когда он получает ответ от сервера, он вызывает ваш код function(tweets) {.... Нет гарантии, что ответы с сервера будут возвращаться в том же порядке, в котором вы их отправили, тем более что ваш цикл будет запускать все запросы практически одновременно.

Чтобы заставить его работать так, как вы хотите, вам нужно добавить какую-то проверку, чтобы увидеть, ответил ли сервер на все ваши $.getJSON(followers ... запросы, а затем добавить каждый к <ul> список. Оставьте мне комментарий, если вам нужна помощь.


Обновление (2010-11-18): Оказывается, я ошибался по поводу проблем, с которыми вы столкнулись. Я думаю, что вы, возможно, перепутали свои классы с идентификаторами. Вот модифицированная версия вашего кода, которая работает:

$.each(data.query.results.row, function() {
    var name = this.col0;
    var twitter = this.col5;

    var li = $('<li>').html('<ul><li>'+name+'</li>'
               + '<li>Twitter ID: @' + twitter
               + ' <span class="tweetdisplay"'
               + 'id="' + twitter + '"></span></li></ul>'
    );
    $('#result>ul').append(li);

    var followers="http://api.twitter.com/1/users/show.json?screen_name="+twitter+"&callback=?"
    $.getJSON(followers, function(tweets) {
        $('#'+twitter).html('twitter followers: ' +tweets.followers_count);
    });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...