Прочитать содержимое текстового файла каждые 15 секунд
Я работаю над музыкальным сайтом: У меня есть текстовый файл на сервере, который содержит имя текущей композиции. Я хотел бы читать текстовый файл каждые пятнадцать секунд и изменять текст, отображаемый на моем сайте, без обновления.
теперь, используя немного jQuery и javascript, я фактически добрался до точки, где файл читается и отображается в первый раз, но он не будет обновляться . Я пробовал все виды функций setInterval, но для жизни меня я не могу заставить эту часть работать. Любая помощь будет очень признательна.
вот что у меня есть:
<script type="text/javascript">
$(document).ready(function() {
jQuery.get('http://www.XXXXX.com/nowplaying/NowPlaying.txt', function(data) {
var myvar = data;
var parts = myvar.split(/n/);
var songtitle = parts[0];
var songartist = parts[1];
var songalbum = parts[2];
var songtime = parts[3];
$('#songtitleholder').html(songtitle);
$('#songartistholder').html(songartist);
$('#songalbumholder').html(songalbum);
});
});
</script>
6 ответов
вы можете поместить код, который вы хотите выполнить repeatedly
в функцию и передать эту функцию в setTimeout
. Второй параметр setTimeout будет принимать интервал в millisecond
.
использование setTimeout здесь IMO больше appropriate
вот как это исключает время, необходимое для отправки запроса и получения ответа. Это будет send request every 5 second after receiving response.
<script type="text/javascript">
$(document).ready(function() {
function functionToLoadFile(){
jQuery.get('http://www.XXXXX.com/nowplaying/NowPlaying.txt', function(data) {
var myvar = data;
var parts = myvar.split(/\n/);
var songtitle = parts[0];
var songartist = parts[1];
var songalbum = parts[2];
var songtime = parts[3];
$('#songtitleholder').html(songtitle);
$('#songartistholder').html(songartist);
$('#songalbumholder').html(songalbum);
setTimeout(functionToLoadFile, 5000);
});
}
setTimeout(functionToLoadFile, 10);
});
</script>
вы должны иметь возможность обернуть свой пример в вызов setInterval следующим образом:
$(document).ready(function() {
setInterval( function(){
jQuery.get('http://www.XXXXX.com/nowplaying/NowPlaying.txt', function(data) {
var myvar = data;
var parts = myvar.split(/\n/);
var songtitle = parts[0];
var songartist = parts[1];
var songalbum = parts[2];
var songtime = parts[3];
$('#songtitleholder').html(songtitle);
$('#songartistholder').html(songartist);
$('#songalbumholder').html(songalbum);
});
}, 15000);
});
создайте функцию и вызовите ее с помощью setInterval
(вы можете добавить метку времени в URL, чтобы результат не кэшировал)
$(document).ready(function() {
function refresh(){
jQuery.get('http://www.XXXXX.com/nowplaying/NowPlaying.txt', { "t": $.now() }, function(data) {
var myvar = data,
parts = myvar.split(/\n/),
songtitle = parts[0],
songartist = parts[1],
songalbum = parts[2],
songtime = parts[3];
$('#songtitleholder').html(songtitle);
$('#songartistholder').html(songartist);
$('#songalbumholder').html(songalbum);
});
}
setInterval(refresh, 15000);
});
решение с помощью setTimeout
. setInterval
имеет тенденцию становиться в очередь, когда окно теряет фокус при переключении вкладок браузера.
$(document).ready(function() {
getData();
});
function getData() {
setTimeout(function() {
jQuery.get('http://www.XXXXX.com/nowplaying/NowPlaying.txt', function(data) {
var myvar = data;
var parts = myvar.split(/\n/);
var songtitle = parts[0];
var songartist = parts[1];
var songalbum = parts[2];
var songtime = parts[3];
$('#songtitleholder').html(songtitle);
$('#songartistholder').html(songartist);
$('#songalbumholder').html(songalbum);
/* repeat getData*/
getData();
});
}, 15000)
}
В дополнение к использованию setInterval
согласно ответам всех остальных, убедитесь, что файл не кэшируется, запросив:
jQuery.get("http://......./NowPlaying.txt?t="+new Date().getTime(), function....);