2012-12-22 20 views
7

私は音楽サイトで働いています: 私は現在再生中の曲の名前を含むテキストファイルをサーバー上に持っています。 私は15秒ごとにテキストファイルを読んで、自分のサイトに表示されているテキストを更新したいのですが、 は更新しません。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> 
+0

このような情報をテキストファイルではなくデータベースに保存することを検討してください。 – Horen

答えて

5

はあなたがrepeatedlyを実行するコードを置くことができますその関数をsetTimeoutに渡します。 setTimeoutの2番目のパラメータは、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> 
+0

これは美しく機能します。ありがとうございました。ページの上に着くとすぐにターゲットテキストファイルを読み込んで表示する方法はありますか?今のように、曲のタイトルラベルは数秒間空白になります(私は完全に一緒に暮らすことができます)。迅速な対応をありがとう! –

+0

私は自分の答えを更新しました。ページがロードされてすぐにロードされ、5秒後にリロードされます。ここでsetTimeoutを使用すると、ここでIMOがより適切です。これは、送信要求と受信応答に要する時間を除外するためです。応答を受け取った後、5秒ごとに要求を送信します。 – Adil

+0

これは私にとって完璧に機能しました。ありがとうございました。この場所は素晴らしいです!私は、私が休日の後までつかまっているガンナだと思った! –

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); 
});​ 
3

は(あなたは結果がをキャッシュしないように、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); 
});​ 
0

を関数を作成し、setIntervalでそれを呼び出します?皆の答えに従ってsetIntervalを使用することに加えて

window.setInterval(function(){ 

    /// call your function here 

    }, 15000); 
0

、ファイルを要求することで、キャッシュされていないことを確認してください:

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

jQueryは自動的にURLにタイムスタンプを追加します – charlietfl

+0

返信いただきありがとうございます! –

+0

@charlietfl、そうでないでしょう。 'cache'オプションのデフォルトは' script'と 'jsonp'を除いて真です。 http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings –

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) 

} 
+0

ご返信ありがとうございます! –

関連する問題