Javascript w warunku php nie chce działać... Warunek wykonuje się

0

Dane wczytywane ajaxem sprawdzam warunkiem php if. Ogólnie waunek jest spełniony bo przykładowo robiąc:
if($_POST['zmienna'] == 1 { echo "true"; })
to wyświetla "true", ale gdy dodam do warunku:
echo "<script type='text/javascript'>liczCzas(".$pozostalo.")</script>";
to nie pokazuje procesu odliczania czasu (i skrypt odpowiedzialny za dynamiczne przesyłanie danych ajax, ale to nie stanowi różnicy).
W head oczywiście mam:

 <script type='text/javascript'>        
        function liczCzas(ile) {
            godzin = Math.floor(ile / 3600);
            minut = Math.floor((ile - godzin * 3600) / 60);
            sekund = ile - minut * 60 - godzin * 3600;
            if (godzin < 10){ godzin = "0"+ godzin; }
            if (minut < 10){ minut = "0" + minut; }
            if (sekund < 10){ sekund = "0" + sekund; }
            if (ile > 0) {
                ile--;
                document.getElementById("zegar").innerHTML = godzin + ':' + minut + ':' + sekund;
                setTimeout("liczCzas("+ile+")", 1000);
            } else {
                document.getElementById("zegar").innerHTML = "[zakończono]";
            }
        }
    </script>

Normalnie gdy umieszczę:
echo "<script type='text/javascript'>liczCzas(".$pozostalo.")</script>";
poza warunkiem, to czas będzie się odliczał.
Co mogę zrobić, aby odliczany czas się wyświetlał?

0

podejrzyj w konsoli przeglądarki, firebugu czy innym dodatku jakim błędem sypnął js.
samo zliczanie czasu powinno nie powinno polegać na założeniu, że setTimeout wywoła podaną funkcję dokładnie po podanym czasie. odchylenia mogą być bardzo duże, zwłaszcza gdy zliczasz długi odcinek czasu.
podawanie do setTimeout/setInterval kodu do wykonania w postaci stringa to brzydka praktyka programistyczna. powinieneś tam dać funkcję.

0

znalazłem na forum wypowiedzi lecz w innym przykładzie:
"skrypty js sie nie odpalaja w contencie ładowanym ajaxem." lub "Ze względów bezpieczeństwa przeglądarka nie odpala tagów <script> w momencie ustawienia innerHTML. Pisał o tym @nav , ale dotyczy to nie tylko Ajaxa, tylko samej własności innerHTML. Jedno z rozwiązań to użycie JSON-a. To będzie najbezpieczniejsze, choć odrobinę skomplikowane"
Teraz to zupełnie nie wiem jak się do tego dobrać...

0

masz zły warunek:

 
if($_POST['zmienna'] == 1 { echo "true"; })

zamień na

 
if($_POST['zmienna'] == 1) { echo "true"; }
0

to był tylko przykład, pisałem w rozpędzie ^^

0

taki kawałek kodu u mnie działa:

 <script type='text/javascript'>        
        function liczCzas(ile) {
            godzin = Math.floor(ile / 3600);
            minut = Math.floor((ile - godzin * 3600) / 60);
            sekund = ile - minut * 60 - godzin * 3600;
            if (godzin < 10){ godzin = "0"+ godzin; }
            if (minut < 10){ minut = "0" + minut; }
            if (sekund < 10){ sekund = "0" + sekund; }
            if (ile > 0) {
                ile--;
                document.getElementById("zegar").innerHTML = godzin + ':' + minut + ':' + sekund;
                setTimeout("liczCzas("+ile+")", 1000);
            } else {
                document.getElementById("zegar").innerHTML = "[zakończono]";
            }
        }
    </script>

	<div id = "zegar"></div>
	
<?PHP
$pozostalo = 50000;
if($_GET['zmienna'] == 1) 
{ 
  echo "<script type='text/javascript'>liczCzas(".$pozostalo.");</script>"; 
} 
else 
{ 
  echo "false"; 
}
?>

0

wiem :) jednak spróbuj przekazać $_POST['zmienna'] przez ajaxa. Wtedy nie zadziała

0

Po pierwsze REST.
Po drugie, po co przesyłać jeden blok <script> w celu odpalenia funkcji, którą masz już wcześniej zadeklarowaną w ciele dokumentu? Nie możesz po stronie serwera zwrócić samego parametru ile a po stronie klienta odpalić z tym parametrem funkcję liczCzas()? Ponadto, czy wiesz co się będzie działo, jeśli załadujesz taki blok <script> ponownie (i n-ty raz)?
Czysty javascript nie parsuje ponownie (w sumie nie wiem jak się to nazwa i nie chce mi się szukać) html'a dynamicznie wciśniętego w DOM, jQuery / Prototype to robią.

1 użytkowników online, w tym zalogowanych: 0, gości: 1