Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] Problem z moim skryptem...
Forum PHP.pl > Forum > Przedszkole
ApC
Witam:

Kod
<div id="abc"></div>


<script type="text/javascript">
function procent() {
var czas = <? print time(); ?>;
document.getElementById("abc").innerHTML= czas;
setTimeout("procent();", 1000);
}
procent();
</script>


I wszystko działa, ale jest problem, nie wiem czemu ale za każdym odświeżeniem time(); się nie zmienia, po mimo tego, że skrypt całkowicie się odświeża (funkcja procent() ). Ktoś wie?
nexis
Cytat(ApC @ 13.10.2007, 10:15:34 ) *
  1. var czas = <? print time(); ?>;


PHP jest językiem wykonującym się po stronie serwera, a nie przeglądarki. Skoro chcesz użyć JavaScript to użyj też jego funkcji do wyświetlania czasu!
pjozwiak1
Nie rozumiem co chcesz uzyskać?
Wykonując funkcję [js] procent() przeładowujesz zawartość <div id="abc">
W funkcji procent() zmienna czas jest raz zainicjowana wartością wygenerowaną na stałe przez php.
funkcją setTimeout() co 1 sekundę wywołujesz znowu funkcję procent, która w diva wstawia tą samą wartość.

Spróbuj może takiego rozwiązania, ono pokaże Ci zasadę działania:
  1. <div id="abc" onmouseover="procent();"> </div>
  2.  
  3.  
  4. <script type="text/javascript">
  5. var czas = <? print time(); ?>;
  6.  
  7. function procent() {
  8. czas++;
  9. document.getElementById("abc").innerHTML= czas;
  10. setTimeout("procent();", 1000);
  11. }
ApC
I tak nie działa, dlaczego - nie wiem. Problem polega na tym, że jeżeli mam var czas = <? print time(); ?>; pod tym function { } to powinno mi pobierać za każdym razem nowy time(); Jak mam teraz to i tak nie działa, odwołajmy się do mojego przykładu, pierwszego. Dlaczego nie działa, jeżeli mam w function albo przed? o co tutaj dokładnie chodzi smile.gif? Bo mam skrypt w php który oblicza z time(); i muszę koniecznie mieć 'phpowskie' time(); Nie wiem czy ktoś mnie zrozumiał, ale nie działa. Spójrzcie na to co napisałem i postarajcie się pomóc - dzięki. Chcę aby zwracało mi poprawny aktualny time();

---

Nexis - a mam pytanko, czy javascript ma coś o takiej samej wartości jak php ma time(); smile.gif? :/
maziak
Nie nie, to nie tak działa.

Całe PHP wykonuje sie na serwerze, po czym zawartosc tej juz "obrobionej" przez PHP strony jest wysyłana do użytkownika. PHP juz wtedy "nie obchodzi" co sie dalej z tą stroną dzieje, i każde dalsze ingerowanie w strukture strony to już musi być technika działająca po stronie przeglądarki(do łączenia przeglądarkiz serwerem mozna zastosowac np. AJAX, ale to juz wyższa szkoła jazdy). Dla tego wlasnie mozna jednorazowo wrzucić zmienne PHP do kodu js, ktory zostanie wysłany do przeglądarki, a nie można np. co sekunde wykonywać jakiejś funkcji php.

przykładowo :
  1. <?php 
  2. $zmienna="kek";
  3. ?>
  4. <script type="text/javascript">';
  5. var czas = <? echo $zmienna ?>;
  6.  
  7. </script>

Przegladarka zobaczy jako :

  1. <script type="text/javascript">';
  2. var czas = kek;
  3.  
ApC
Cytat(maziak @ 13.10.2007, 11:40:59 ) *
Nie nie, to nie tak działa.

Całe PHP wykonuje sie na serwerze, po czym zawartosc tej juz "obrobionej" przez PHP strony jest wysyłana do użytkownika. PHP juz wtedy "nie obchodzi" co sie dalej z tą stroną dzieje, i każde dalsze ingerowanie w strukture strony to już musi być technika działająca po stronie przeglądarki(do łączenia przeglądarkiz serwerem mozna zastosowac np. AJAX, ale to juz wyższa szkoła jazdy). Dla tego wlasnie mozna jednorazowo wrzucić zmienne PHP do kodu js, ktory zostanie wysłany do przeglądarki, a nie można np. co sekunde wykonywać jakiejś funkcji php.

przykładowo :
  1. <?php
  2. $zmienna=&#092;"kek\";
  3. ?>
  4. <script type=\"text/javascript\">';
  5. var czas = ;

Przegladarka zobaczy jako :

  1. <script type="text/javascript">';
  2. var czas = kek;
  3.  

Całkowicie to rozumiem, ale co mi dały te twoje przykłady? Przecież w pierwszym poście napisałem:

Kod
var czas = <? print time(); ?>;

Dużo mi nie pomogłeś... Wie ktoś jak zrobić, aby mi pobierało aktualny time() co 1 s w skrypcie js?
nexis
  1. <script type="text/javascript">
  2. /* Odpowiednik funkcji time() w PHP */
  3. var currentTime = new Date();
  4. var czas = Math.round(currentTime.getTime()/1000);
  5. document.write(czas);
  6. /* Pamiętajmy jednak, że JavaScript pobiera czas z komputera, na którym jest wywoływany - PHP zaś czas z serwera! */
maziak
Nie przeczytales za bardzo tego co napisałem, wiedział byś gdzie leżał błąd.
Twój kod :
  1. <script type="text/javascript">
  2. function procent() {
  3. var czas = <? print time(); ?>;
  4. document.getElementById("abc").innerHTML= czas;
  5. setTimeout("procent();", 1000);
  6. }
  7. procent();


Czyli co sekunde powtarzałeś funkcje, przypisujac zawsze ta sama wartosc do zmiennej "czas"(jednorazowo wygenerowaną przez PHP). Najlepiej to skorzystaj z tego, co napisał nexis, a jezeli nie kończysz pisania stron na tym przykładzie to zdecydowanie polecam zrozumienie zasady działania php względem js, bez tego ani rusz.
Pozdrawiam.

PS. lekko zedytowane to co napisał pjozwiak
  1. <div id="abc"> </div>
  2.  
  3. <script type="text/javascript">
  4. var czas = <? print time(); ?>;
  5.  
  6. function procent() {
  7. czas++;
  8. document.getElementById("abc").innerHTML= czas;
  9. }
  10.  
  11. setInterval("procent();", 1000);

Powinno działać. smile.gif
nexis
Jeśli chcesz jednak pobierać czas z serwera użyj AJAX!

js/advajax.js

js/actions.js

  1. <?php
  2. function procent() {
  3. advAJAX.get({
  4. url : "time.php",
  5. onSuccess : function(obj) {
  6. document.getElementById("time").innerHTML = obj.responseText;
  7. }
  8. });
  9. setTimeout("procent()", 1000);
  10. }
  11. ?>


index.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <title>Funkcja time() w JavaScript</title>
  4. <script type="text/javascript" src="js/advajax.js"></script>
  5. <script type="text/javascript" src="js/action.js"></script>
  6. </head>
  7.  
  8. <div id="time" onmouseover="procent()">?</div>
  9.  
  10. </body>
  11. </html>


time.php

  1. <?php
  2. ?>
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.