Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript]Wyciaganie informacji z tablicy.
Forum PHP.pl > Forum > Przedszkole
MeGusta
Witam, mam problem ponieważ nie mogę przekazać zmiennej php do zmiennej js. Zmienna tab jest pusta. Ogólnie chcę aby co 5 sekund jedna wartość z tablicy się wyświetlała.

  1. <?php
  2.  
  3. $string = Array('cios pierwszy', 'cios drugi', 'cios trzeci', 'cios czwarty', 'cios piąty');
  4.  
  5. ?>
  6. <script type="text/javascript">
  7.  
  8. var tab = eval(<?php echo trim($string,',');?>);
  9.  
  10. for(var i = 0; i < tab.length; i++){
  11.  
  12. setTimeout(function() {
  13.  
  14. document.getElementById("battle").innerHTML= tab[i]+ "<br>";
  15.  
  16. }, 50);
  17.  
  18. }
  19.  
  20. </script>
viking
PHP działa po stronie serwera, JS po stronie klienta (widzi wynik generowania PHP). Nie ma opcji aby w bezpośredni sposób te dwie strony widziały swoje zmienne. Możesz np zapisać jako JSON i wysłać Ajaxem.
MeGusta
Okej, dziękuję. Jeszcze jakbyś mi mógł powiedzieć czemu mi wyswietla wszystkie na raz elementy zamiast co 5 sekund jedno.
viking
5 sekund to 5000ms nie 50
MeGusta
W swoim skrypcie mam 5000 i wyświetla 1 rekord lub wszystkie na raz.

a powinno być, 1 rekord z tablicy, 5 sekund, 2 rekord z tablicy 5 sekund itd. Co zrobiłem źle?
trueblue
Jeśli tablica elementów nie zmienia się, to musisz po prostu poprawnie wdrukować jej elementy w kodzie JS.
Pętla for nie jest tu potrzebna, a zamiast setTimeout powinieneś użyć setInterval, tam pobierać element z tablicy, zwiększać indeks tablicy, a w przypadku maksimum, zerować.
MeGusta
Kurczę, nie bardzo rozumiem, mógłbys dac jakis przykład?
trueblue
Kod
var tab=array('cios pierwszy', 'cios drugi', 'cios trzeci', 'cios czwarty', 'cios piąty'); // tu tablica wdrukowana w php
var index=0;

setInterval(function() {
document.getElementById("battle").innerHTML= tab[index++]+ "<br>";
if(index==tab.length) index=0;
},5000);
MeGusta
Dziękuję bardzo, ostatnią prośbe mam do Ciebie, jak moge zrobić aby wyśiwetlało się tylko raz? bo aktualnie się wyswietla w kółko.
viking
Kod
var index = 0;
                var f = setInterval(function() {
                    document.getElementById("battle").innerHTML = tab[index++] + "<br>";
                    if (index === 5) {
                        clearInterval(f);
                    }
                }, 1000);
MeGusta
Problem w tym że ilość elementów w tablicy będzie różna, a nie tak jak napisałeś 5 elementów. Jak mogę to zrobić żeby pasowało do dowolnej ilości elementów?

Tak? :

  1. if (index === tab) {
  2.  
  3. clearInterval(f);
  4.  
  5. }
viking
A wiesz że jest coś takiego jak dokumentacja?
https://developer.mozilla.org/pl/docs/Web/J...ty/Array/length
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.