2012-12-22 44 views
7

pracuję na stronie muzycznej: Mam plik tekstowy na serwerze, który zawiera nazwę aktualnie odtwarzanego utworu. Chciałbym przeczytać plik tekstowy co piętnaście sekund i zmienić tekst wyświetlany na mojej stronie, bez odświeżania.Czytaj zawartość pliku tekstowego co 15 sekund

Teraz, używając trochę jQuery i JavaScript, I rzeczywiście dostał się do punktu, w którym plik zostanie odczytany i wyświetlony po raz pierwszy, ale to przyzwyczajenie odświeżyć. Próbowałem różnych funkcji setInterval, ale w moim życiu nie mogę wykonać tej części. Każda pomoc będzie bardzo ceniona.

Oto co mam:

<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

Na marginesie, należy rozważyć zapisanie takich informacji w bazie danych, zamiast w pliku tekstowym. – Horen

Odpowiedz

5

można umieścić kod, który chcesz wykonać repeatedly w funkcja i przekazać tę funkcję w setTimeout. Drugi parametr setTimeout zajmie przedział w millisecond.

Przy użyciu funkcji setTimeout tutaj IMO jest bardziej appropriate tutaj, ponieważ spowoduje wykluczenie czasu potrzebnego na wysłanie żądania i odpowiedź. Będzie 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

To działa pięknie! Dziękuję Ci. Czy istnieje sposób na odczytanie docelowego pliku tekstowego, gdy tylko pojawi się on na stronie, wyświetli go, NASTĘPNIE odświeżysz? W tej chwili tytuł wytwórni pozostaje pusty przez kilka sekund (z czym CAŁKOWICIE mogę żyć). Dziękuję za szybką odpowiedź! –

+0

Zaktualizowałem moją odpowiedź, załaduje się, gdy tylko strona zostanie załadowana i ponownie załaduje po 5 sekundach. Używanie setTimeout tutaj IMO jest bardziej odpowiednie tutaj, ponieważ będzie wykluczać czas potrzebny na wysłanie żądania i otrzymanie odpowiedzi. Będzie wysyłać żądanie co 5 sekund po otrzymaniu odpowiedzi. – Adil

+0

to działało idealnie dla mnie. Dziękuję Ci. To miejsce jest niesamowite! Myślałem, że utknąłem na gunnie do wakacji! –

3

powinien być w stanie owinąć przykład w setInterval rozmowy jak ta:

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

Tworzenie funkcji i wywołać ją z setInterval (może chcesz dodać znacznik czasu do adresu URL tak, że wynik nie buforuje)

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

Dlaczego nie spróbować tego ?

window.setInterval(function(){ 

    /// call your function here 

    }, 15000); 
0

Oprócz korzystania setInterval jak na każdy inny odpowiedzi, upewnij się, że plik nie jest buforowane przez wnioskujące:

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

jQuery automatycznie doda sygnaturę czasową do adresu URL – charlietfl

+0

, dziękuję bardzo za odpowiedź! –

+0

@charlietfl, nie będzie. Domyślna opcja 'cache' ma wartość true, z wyjątkiem' script' i 'jsonp'. Zobacz http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings –

1

rozwiązanie wykorzystujące setTimeout. setInterval ma tendencję do umieszczania w kolejce, gdy okno traci fokus podczas przełączania zakładek przeglądarki.

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

Dziękuję bardzo za odpowiedź! –

Powiązane problemy