8

私は音楽サイトで作業しています。サーバー上に、現在再生中の曲の名前を含むテキストファイルがあります。50秒ごとにテキストファイルを読み、更新せずにサイトに表示されるテキストを変更したいと思います。

さて、少しの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>
4

6 に答える 6

6

実行したいコードを関数に入れて、repeatedlyその関数をに渡すことができますsetTimeout。setTimeoutの2番目のパラメーターは、間隔を取りますmillisecond

ここでsetTimeoutを使用appropriateすると、要求の送信と応答の受信にかかる時間が除外されるため、IMOはさらにここにあります。そうなる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>
于 2012-12-22T16:03:53.363 に答える
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);
});​
于 2012-12-22T16:03:46.140 に答える
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);
});​
于 2012-12-22T16:04:04.843 に答える
1

を使用したソリューションsetTimeoutsetIntervalブラウザのタブを切り替えているときにウィンドウがフォーカスを失うと、キューに入る傾向があります。

$(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)

}
于 2012-12-22T16:07:44.003 に答える
0

setInterval他の人の回答に従って使用することに加えて、次のように要求して、ファイルがキャッシュされていないことを確認してください。

jQuery.get("http://......./NowPlaying.txt?t="+new Date().getTime(), function....);
于 2012-12-22T16:05:09.087 に答える
0

これを試してみませんか?

    window.setInterval(function(){

    /// call your function here

    }, 15000);
于 2012-12-22T16:04:13.397 に答える