每15秒读取一次文本文件的内容

时间:2012-12-22 16:00:07

标签: javascript jquery setinterval partial-page-refresh

我正在音乐网站上工作: 我在服务器上有一个文本文件,其中包含当前播放歌曲的名称。 我想每隔十五秒阅读一次文本文件,并更改我网站上显示的文字, 没有刷新。

现在,使用一点点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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:3)

您应该能够将您的示例包装在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);
});​

答案 2 :(得分:3)

创建一个函数并使用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);
});​

答案 3 :(得分:1)

使用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)

}

答案 4 :(得分:0)

为什么不尝试这个?

    window.setInterval(function(){

    /// call your function here

    }, 15000);

答案 5 :(得分:0)

除了根据其他人的答案使用setInterval之外,请确保通过请求缓存文件:

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