Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przeładowanie podstron
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
Mam stronę opartą na podstronach. Chciałbym przeładowywać automatycznie podstrony. Odliczam czas tak:
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. function countTime(tid, how) {
  3. hrs = Math.floor(how / 3600);
  4. min = Math.floor((how - hrs * 3600) / 60);
  5. sec = how - min * 60 - hrs * 3600;
  6. if (hrs < 10) { hrs = "0" + hrs; }
  7. if (min < 10) { min = "0" + min; }
  8. if (sec < 10) { sec = "0" + sec; }
  9. if (how > 0) {
  10. how--;
  11. document.getElementById(tid).innerHTML = hrs + ':' + min + ':' + sec;
  12. setTimeout("countTime('"+tid+"',"+how+")", 1000);
  13. }
  14. }
  15. </script>
[JAVASCRIPT] pobierz, plaintext

Licznik wyświetlam w SPAN. Po odliczeniu czasu, chcę przekierować (odświeżyć) podstronę tak:
  1. header("refresh: ".$event['ft']."; url='index.php?go=account");
  2. // próbowałem też:
  3. echo '<meta http-equiv="'.$event['ft'].'" content="X; URL=index.php?go=account">';

Całość próbnego kodu:
  1. <?php
  2. // DANE DO TESTU
  3. $ref = 0;
  4. $event['ft'] = 10;
  5. $event['type'] = 1;
  6. $event['event'] = 3;
  7.  
  8. if($ref == 0) {
  9. header("refresh: ".$event['ft']."; url='index.php?go=account");
  10. $ref = 1;
  11. }
  12. $ft = $event['ft'];
  13. if($event['type'] == 1) {
  14. ?>
  15. <div style="margin-bottom: 10px">
  16. <?php echo $event['b_name'] ?>
  17. <span style="float: right">
  18. <span id="t<?php echo $event['event'] ?>"></span>
  19. </span>
  20. <script type="text/javascript">countTime('t<?php echo $event['event'] ?>',<?php echo $ft ?>);</script>
  21. </div>
  22. </div><!-- blok -->
  23. <?php
  24. }
  25. ?>

Problem polega na "podskakiwaniu" strony przy uruchamianiu i odświeżaniu, po za tym, nie przeładowuje strony. Problem znika po zakomentowaniu linii z header. DEMO.
Dodam, że używam ob_start / ob_end_flush.
nospor
Skoro odliczanie robisz w js to i przekierowanie masz zrobic w js a nie przez naglowek w php

Poza tym w przekierowaniu php masz blad....
Nie: header("refresh: ".$event['ft']."; url='index.php?go=account");
a:header("refresh: ".$event['ft']."; url=index.php?go=account");
Naprawde nie widziales apostrofu w linku na ktory cie przekierowywalo i nie widziales napisu "STRONA NIE ISTNIEJE"?
Kshyhoo
Pewnie przy kolejnej wersji się przypałętał... Nie zmienia to faktu, że nadal strona mi podskakuje i nie przeładowuje po zakończeniu odliczania.
nospor
1) Mi przeladowuje sie twoj link
2) Jak juz pisalem, skoro odliczanie robisz w js, to i przeladowanie rob w js a nie oddzielnie w php
Kshyhoo
Rozumiem, że mogę to zrobić w JS, ale chciałbym rozwiązać i tę zagadkę. Co wykryłem, że pod GCh i IE11 działa, a nie działa pod FF smile.gif
nospor
A mi dziala pod kazdą przeglądarką.
Kshyhoo
Czyli tak:
  1. <script type="text/javascript">
  2. setTimeout(function() {
  3. window.location.href="index.php?go=<?php echo $_GET['go'] ?>";
  4. }, <?php echo $ft * 1000 ?>);
  5. </script>

Niby ten sam czas, a przeładowuje 2 sek. szybciej.
nospor
O tu masz zrobic przeladowanie:
if (how > 0) {

how--;

document.getElementById(tid).innerHTML = hrs + ':' + min + ':' + sec;

setTimeout("countTime('"+tid+"',"+how+")", 1000);

}
Jak ci licznik dojdzie do 0.
Kshyhoo
No a jak mam w takim razie wywołać kilka zdarzeń tego JS na jednej stronie? Musiałbym przekazać jeszcze adres i $ref do funkcji countTime w innym pliku zresztą...
nospor
No to teraz juz nie wiem o czym mowisz
Kshyhoo
Np. tak:
  1. <!-- jedno zdarzenie -->
  2. <div style="margin-bottom: 10px">
  3. <?php echo $event['b_name'] ?>
  4. <span style="float: right">
  5. <span id="t<?php echo $event['event'] ?>"></span>
  6. </span>
  7. <script type="text/javascript">countTime('t<?php echo $event['event'] ?>',<?php echo $ft ?>);</script>
  8. </div>
  9.  
  10. <!-- drugie zdarzenie -->
  11. <div style="margin-bottom: 10px">
  12. <?php echo $event['b_name'] ?>
  13. <span style="float: right">
  14. <span id="t<?php echo $event['event'] ?>"></span>
  15. </span>
  16. <script type="text/javascript">countTime('t<?php echo $event['event'] ?>',<?php echo $ft ?>);</script>
  17. </div>

Różnią się jedynie czasem ($ft) i nazwą ($event['event']).
nospor
Dobra nie wnikam po co ci ten kolejny parametr, ale jaki masz problem by go przekazac?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.