Я весь день просматривал форумы, но я не понимаю.
Я звоню в Justin.TV-API, чтобы отобразить список моих «последующих» потоков, а затем выполнить вложенный вызов, чтобы проверить, какой из них находится в сети.
Вот код, я хотел использовать:
//Get Favorites as Object "favs"
var viewers;
$.getJSON('http://api.justin.tv/api/user/favorites/hubschrauber.json?jsonp=?', function(favs) {
$.each(favs, function(key, value) {
//For every Object, check if user is referenced in stream and therefore online
$.getJSON('http://api.justin.tv/api/stream/list.json?channel=' + favs[key].login + '&jsonp=?', function(streams) {
viewers = streams[0].channel_count;
});
$('#result').append(favs[key].title + ' ' + key + ': ' + favs[key].login + ' (' + viewers + ') Viewers<br />');
});
});
Затем я наткнулся на проблемы с getJSON и asychronisation и переписал мой сценарий пару раз:
первый как это (замена $ .each):
//Get Favorites as Object "favs"
var viewers;
$.getJSON('http://api.justin.tv/api/user/favorites/hubschrauber.json?jsonp=?', function(favs) {
for (var key in favs) {
//For every Object, check if user is referenced in stream and therefore online
$.getJSON('http://api.justin.tv/api/stream/list.json?channel=' + favs[key].login + '&jsonp=?', function(streams) {
viewers = streams[0].channel_count;
});
$('#result').append(favs[key].title + ' ' + key + ': ' + favs[key].login + ' (' + viewers + ') Viewers<br />');
}
});
то, как это (замена getJSON с не asynchronus AJAX):
var favs;
var streams;
var viewers;
$.ajax({
url: 'http://api.justin.tv/api/user/favorites/hubschrauber.json?jsonp=?',
async: false,
dataType: 'json',
success: function(favs) {
for (var key in favs) {
$.ajax({
url: 'http://api.justin.tv/api/stream/list.json?channel=' + favs[key].login + '&jsonp=?',
async: false,
dataType: 'json',
success: function(streams) {
viewers = streams[0].channel_count;
}
});
$('#result').append(favs[key].title + ': ' + favs[key].login + ' (' + viewers + ') Viewers<br />');
}
}
});
ни в коем случае я могу передать зрителям-переменной (которая записывается в гнездовой Апи-вызова, чтобы определить, если поток онлайн и сколько зрителей он имеет) к
$('#result').append(favs[key].title + ': ' + favs[key].login + ' (' + viewers + ') Viewers<br />');
Моему выход всегда неопределенные:
Day[9]: day9tv (undefined) Viewers
FollowGrubby: followgrubby (undefined) Viewers
OneMoreGame.TV: onemoregametv (undefined) Viewers
Я сделал несколько проверок с добавлениями и предупреждениями - ответы JSON действительны.
Кто может мне помочь?
Большое спасибо за ваше время.
Примечание к OP: Порядок, в котором они добавляются не может быть предсказуемым. Все последующие вызовы getJSON будут запускаться один за другим, и ответы могут не поступать в том же порядке, в каком они были отправлены. – jfriend00
Большое спасибо, это прекрасно работает. Я по-прежнему пытаюсь попасть в отложенные объекты, поскольку мне интересно хранить некоторые данные в переменных для последующей обработки.Также я могу отображать их в определенном порядке. – Macks
Итак, я должен вернуться к этому. Поскольку я пытаюсь автоматически обновлять свой список каждые несколько секунд и хочу сделать некоторые другие вещи, я думаю, что я действительно должен сохранить список как глобальную переменную. Как я могу это достичь? – Macks