Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][PHP] Problem z odświeżaniem elementu
koxu1996
post
Post #1





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Witam. Napisałem w php kod który pokazuje czas do danego wydarzenia, a javacripcie dałem interwał który to ma pobrać i wyświetlić. Część działa bo onload ładuje to co zwraca funkcja, lecz dalej już się nie odświerza.

Kod:
  1. <html>
  2. <body>
  3. <div id=time></div>
  4.  
  5.  
  6. <script type="text/javascript">
  7. window.onload = function()
  8. {
  9. idElement = "time";
  10. document.getElementById(idElement).innerHTML = "<?php countdown(21,00,00,9,15,2012) ?>" ;
  11. setInterval("document.getElementById(idElement).innerHTML = '<?php countdown(21,00,00,9,15,2012) ?>'", 1000);
  12. };
  13. </script>
  14.  
  15.  
  16.  
  17. <?php
  18. function countdown($godzina,$minuta,$sekunda,$miesiac,$dzien,$rok)
  19. {
  20. $target = mktime($godzina,$minuta,$sekunda,$miesiac,$dzien,$rok);
  21. $now = time() ;
  22. $sekundy =($target-$now) ;
  23. //$sekundy =(int) ($sekundy) ;
  24.  
  25.  
  26. $check=0;
  27. if ($sekundy>0)
  28. {
  29. if ($check==0)
  30. {
  31. if ($sekundy<=10000)
  32. {
  33. // zmien klase
  34. $check=1;
  35. }
  36. }
  37. $hours=floor($sekundy/3600);
  38. $minutes=floor(($sekundy/60)-($hours*60));
  39. $seconds=floor(($sekundy)-($hours*3600)-($minutes*60));
  40.  
  41.  
  42. if($hours < 10)
  43. $hours='0'.$hours;
  44.  
  45. if($minutes < 10)
  46. $minutes='0'.$minutes;
  47.  
  48. if ($seconds < 10)
  49. $seconds='0'.$seconds;
  50.  
  51.  
  52.  
  53.  
  54. $all= $hours . " : " . $minutes . " : " . $seconds;
  55. echo $all;
  56. }
  57. else
  58. {
  59. echo "Aukcja zakończona!";
  60. }
  61. }
  62. ?>
  63.  
  64.  
  65.  
  66. </body>
  67. </html>

Podejrzewam że coś źle połączyłem js z php, ale to tylko moje przypuszczenia ;p Czemu to może nie działać?

P.s Demo: -> KLIK <-

Ten post edytował koxu1996 16.09.2012, 12:21:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
jaslanin
post
Post #2





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

Ostrzeżenie: (0%)
-----


bo PHP i JS działają w różnych kontekstach, tj PHP działa po stronie serwera, a JS po stronie użytkownika

Jak wchodzisz na stronę to kod PHP jest generowany tylko raz, przy odpowiedzi z serwera (wejściu na stronę), a potem JS zawsze używa tej samej, pierwszej odpowiedzi z serwera. Zobacz to w źródle strony masz, odp funkcji PHP wpisane w kod strony.

Musisz albo posłużyć się AJAX albo całkowicie liczyć to po stronie JS, bazując jedynie na danych przekazanych przez PHP.

Bardziej obrazowo można to porównać do drukarki i ołówka. PHP jest drukarką która drukuje stronę raz. A ołówek to JS który możesz pisać po książce i mazać, zmieniać tekst czy dorysowywać wąsy do portretów ludzi, stosunkowo łatwo.

poszukaj w google przykładów odliczania np. na frazę: js countdown timer


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
koxu1996
post
Post #3





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Dzięki wielkie za świetne wytłumaczenie smile.gif Mam jeszcze jedno pytanie co do js z php. Jak mam na przykład funkcje w js:
funcion x(arg) to jak uzyc zmiennej arg w php questionmark.gif
Go to the top of the page
+Quote Post
markonix
post
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Cytat(koxu1996 @ 16.09.2012, 13:45:07 ) *
funcion x(arg) to jak uzyc zmiennej arg w php questionmark.gif

Tak jak zrobiłeś to w 10 i 11 linii - po prostu wyświetliłeś.


--------------------
Go to the top of the page
+Quote Post
koxu1996
post
Post #5





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Ale ja nie chce wstawić zmiennej php do js tylko zmienna z js do php. Mniej więcej coś takiego
  1. <script>
  2. var zmienna=1
  3. <?php funkcja(zmienna) ?>
  4. </script>

Zresztą i tak się nie da chyba tego zrobić... Ciekawi mnie tylko czy są jakieś funkcje w javascript typu mktime czy time które nie korzystają z systemowego zegarka... Może znacie jakieś sposoby na pobranie czasu rzeczywistego?
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Funkcje PHP wykonują się PRZED jakimkolwiek JS i tę kolej rzeczy zmienia się AJAXem, który właśnie wykonuje skrypt PHP z dowolnymi parametrami (GET, POST).

Co do pytania o zegarek to JS nie ma nic wspólnego ze serwerem, działa na TWOIM KOMPUTERZE.
Żeby w JS otrzymać czas serwerowy przekazujesz przy załadowaniu do niego zmienną za pomocą PHP.
Najprościej będzie przekazać coś takiego.

  1. var unix = <?= time(); ?>


I w JS masz dostęp do czasu unix realnego i na podstawie jego robisz zegarek z odliczaniem sekundowym albo minutowym.

Ten post edytował markonix 16.09.2012, 19:36:24


--------------------
Go to the top of the page
+Quote Post
koxu1996
post
Post #7





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Próbowałem zrobić to za pomocą liczenia różnicy czasu między komputerem i serwerem, ale to nie za dobrze działało. Teraz zrobiłem plik time.php który zwraca czasy oddzielone średnikami, lecz nie wiem za bardzo jak pliku index.php pobrać to co zwraca time.php. Jak to zrobić?

Edit: Znalazłem coś takiego:

  1. var isIE = false;
  2. var requests = new Array();
  3. function getRequestObject() {
  4. if (requests.length < 1) {
  5. //log("new request " + typeof XMLHttpRequest);
  6. if (window.XMLHttpRequest && !(window.ActiveXObject)) {
  7. try {
  8. return new XMLHttpRequest();
  9. } catch (e) {log("to nie jest FF");}
  10. }
  11. isIE = true;
  12. //log("IE");
  13. // Internet Explorer
  14. try {
  15. return new ActiveXObject("Msxml2.XMLHTTP.6.0");
  16. } catch(e) {}
  17. try {
  18. return new ActiveXObject("Msxml2.XMLHTTP.3.0");
  19. } catch(e) {}
  20. try {
  21. return new ActiveXObject("Msxml2.XMLHTTP");
  22. } catch(e) {}
  23. try {
  24. return new ActiveXObject("Microsoft.XMLHTTP");
  25. } catch(e) {}
  26. //log("This browser does not support XMLHttpRequest." );
  27. return undefined;
  28. } else {
  29. //log("reuse request");
  30. return requests.pop();
  31. }
  32. }
  33. function releaseRequestObject(request) {
  34. //log("releasing request");
  35. requests.push(request);
  36. }
  37. function sendRequest(callback, url, id) {
  38. var request = getRequestObject();
  39. if (request != undefined) {
  40. var d = new Date();
  41. url = url + "t=" + d.getTime();
  42. if (isIE) {
  43. request.open("GET", url, true);
  44. if (callback != null) {
  45. if (id != null) {
  46. request.onreadystatechange = function() { callback(request, id);};
  47. } else {
  48. request.onreadystatechange = function() { callback(request);};
  49. }
  50. } else {
  51. request.onreadystatechange = function() {};
  52. }
  53. } else {
  54. if (callback != null) {
  55. if (id != null) {
  56. request.onload = function() { callback(request, id);};
  57. } else {
  58. request.onload = function() { callback(request);};
  59. }
  60. } else {
  61. request.onload = function() {};
  62. }
  63. request.open("GET", url, true);
  64. }
  65. request.send(null);
  66. //log("request sent " + typeof request + ", " + isIE);
  67. } else {
  68. //log("nic nie wysyłamy bo się nie da");
  69. }
  70. }

Jakby to wykorzystać?

Ten post edytował koxu1996 24.09.2012, 08:11:29
Go to the top of the page
+Quote Post
markonix
post
Post #8





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Pobieranie co sekundę godziny ze serwera?
Nie brzmi to jak horror bo to nie zapytanie do bazy czy coś ale jednak wciąż mało optymalnie poza tym mniej odporne na opóźnienia - nie zawsze skrypt wykona się natychmiastowo, dostanie laga itp.

Po pierwsze nie pisz w surowym JS, pisz w jQuery i ta sieczka zmieni się w szacuje... 4 linie kodu.

Zastosuj się do mojej sugestii z przypisaniem godziny na początku, przypisujesz czas w momencie załadowania kodu RAZ i potem co sekundę zmieniasz czas za pomocą setInterval.


--------------------
Go to the top of the page
+Quote Post
koxu1996
post
Post #9





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


markonix, potrzebuje odliczaczy czasu które są dynamiczne (każde podbicie aukcji zwiększa czas) więc aktualizacja co sekundę jest potrzebna. Co do mysql to plik time.php pobierane czasy z bazy i je wyświetla. Mógłbyś pomóc trochę z jQuery? Bo nie ogarniam tego...
Go to the top of the page
+Quote Post
markonix
post
Post #10





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Czy to są liczniki widoczne dla wszystkich czy tylko dla osoby podbijającej w danym momencie?

Ale co mam pomóc z jQuery? Nie proponowałbym jakby to było coś trudnego i mało znanego, a jest wręcz przeciwnie - to prostsza wersja JS z mnóstwem przykładów i tutoriali w internecie.


--------------------
Go to the top of the page
+Quote Post
koxu1996
post
Post #11





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Czasy maja byc wyswietlane wszystkim uzytkownikom. Jesli chodzi o pomoc z jquery to mam kod do ciaglej aktualizacji diva, ale nie wiem za bardzo jak go przerobic aby auktalizowal wszystkie divy. Jak wroce do domu kolo 18 to wrzuce kod jaki mam
Go to the top of the page
+Quote Post
markonix
post
Post #12





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Każdy div niech ma atrybut określający z jakim czasem jest połączony - czyli id aukcji.
  1. <div rel="123">10:00</div>.

Tworzysz zapytanie ajaxowe, najoptymalniej zrobić jedno dla wszystkich aukcji.
Pobierasz wszystkie czasy w postaci tablicy np. ID Aukcji => Czas.
Oczywiście tablicę trzeba w jakiś tekstowy sposób zwrócić do skryptu, robi się to za pomocą formatu JSON.
Gdy mamy tablicę już w JavaScript robimy foreach'a JS:
[JAVASCRIPT] pobierz, plaintext
  1. $('div[rel="'+ id_aukcji +'"]').text(czas_aukcji);
[JAVASCRIPT] pobierz, plaintext

To wszystko w pętli co sekundę.

Ten post edytował markonix 25.09.2012, 16:46:44


--------------------
Go to the top of the page
+Quote Post
koxu1996
post
Post #13





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Dodałem w pliku do divów atrybuty, i w pliku mam taki kod:
  1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
  2. var auto_refresh = setInterval( function() {
  3. $.ajax(
  4. {
  5. url: "time.php",
  6. success: function(result)
  7. {
  8. // pobranie elementów do tablicy i ich wyswietlenie
  9. }
  10. });
  11. }, 1000);

plik time.php zwraca tekst w postaci: id;czas;price;winner|id;czas;price;winner|

Co w skrypcie wstawić w miejscu komentarza by wczytać dane do tablicy i wyswietlić je?

Ten post edytował koxu1996 25.09.2012, 17:35:18
Go to the top of the page
+Quote Post
markonix
post
Post #14





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Taki format wymusza na Tobie przerobienie tego na tablicę za pomocą explode w JS.

W PHP traktujesz tablicę za pomocą json_encode.
Potem w JS już masz gotową tablicę i już można iść dalej.


--------------------
Go to the top of the page
+Quote Post
koxu1996
post
Post #15





Grupa: Zarejestrowani
Postów: 139
Pomógł: 3
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Explode w JS? A nie chodziło ci o split()?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:15