Прочитать содержимое текстового файла каждые 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)

}

почему бы не попробовать это?

    window.setInterval(function(){

    /// call your function here

    }, 15000);

В дополнение к использованию setInterval согласно ответам всех остальных, убедитесь, что файл не кэшируется, запросив:

jQuery.get("http://......./NowPlaying.txt?t="+new Date().getTime(), function....);