Эй, ребята, кто может мне помочь? По сути, я хочу сделать нижний колонтитул с последними новостями, который перебирает массив newsWire и автоматически обновляет текст. Проблема в том, что когда я запускаю свой console.log(newsWire.length) вне функции loadNewswire, он возвращает 0, а console.log внутри возвращает 40, как и должно быть?
Ссылка: http://jsfiddle.net/u8y8zh72/3/
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.js"></script>
<style>
footer {
height: 75px;
position: fixed;
bottom: 0;
}
</style>
</head>
<body>
<div class="container">
<ul id="js-news" class="js-hidden"></ul>
</div>
<footer>
<div class="container" id="newswiretxt">
<span></span>
</div>
</footer>
</body>
<script type="text/javascript">
var newsWire = [];
function loadNewswire() {
$.getJSON('http://api.nytimes.com/svc/news/v3/content/all/all.json',
{'api-key': 'XXXXXXXXX'},
function(data) {
console.log(data)
var newsWireTemp = [];
for (var i = 0; i < data.results.length; i++) {
var breakingNews = data.results[i];
var breakingTitle = breakingNews.title;
var breakingAbstract = breakingNews.abstract;
newsWireTemp.push(breakingTitle);
newsWireTemp.push(breakingAbstract);
}
newsWire = newsWireTemp;
console.log(newsWire.length);
});
}
loadNewswire();
console.log(newsWire.length);
$(document).ready(function() {
var items = newsWire;
$text = $('#newswiretxt span'),
delay = 10; //seconds
function loop (delay) {
$.each(items, function (i, elm){
$text.delay(delay*1E3).fadeOut();
$text.queue(function(){
$text.html(items[i]);
$text.dequeue();
});
$text.fadeIn();
$text.queue(function(){
if (i == items.length -1) {
loop(delay);
}
$text.dequeue();
});
});
}
loop(delay);
});
</script>
loadNewswire()
делает асинхронный вызов. Это означает, чтоconsole.log(newsWire.length);
выполняется перед обратным вызовом (newsWire = newsWireTemp;
). Вы можете сказать это, потому что выconsole.log(newsWire.length)
выводятся послеconsole.log(newsWire.length);
- person Juan Mendes   schedule 09.11.2015