Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS][AJAX]Brak aktualizacji zmiennych.
Forum PHP.pl > Forum > Przedszkole
miati
Witam.
Posiadam problem z dynamicznym aktualizowaniem zmiennych w pliku JS.

Posiadam 2 pliki.
W pierwszym na podstawie danych pobranych z bazy dynamicznie aktualizowana jest zmienna var = coś.
(zmienna ta jest aktualizowana z każdym case'm w js - może to pomoże przy rozwiązaniu problemu.)

Następnie jest plik js, który tę zmienną wykorzystuje.

Problem w tym, że aktualizowanie zmiennej działa okej, natomiast zmienna w pliku js 'nie odświeża się' z każdym wykonanym case'm, tylko dopiero po odświeżeniu strony.

Myślałem nad tym, żebym w case dodać jakiś skrypt, który odświeżyłby tę zmienną, czy od nowa ją pobrał, ale nie wiem jak.

Pozdrawiam.
nospor
Forum wrozbiarskie pietro wyzej.

ps: jesli jednak nie chce ci sie isc pietro wyzej, to moze bys tak laskawie podal kod?
miati
Nie krzycz biggrin.gif już podaję smile.gif

Kod php:

  1. <div id='ojj'>
  2.  
  3. <?php
  4. if ($uder['y'] <= 8){
  5. $porusz = "'#anim'";
  6. }
  7. else{
  8. $porusz = "'#map'";
  9. }
  10.  
  11. ?>
  12. <script>
  13. var qwerty = <?php echo ' '.$porusz.' '; ?>;
  14. </script>
  15. </div>


Kod JS :

  1. function go_up(){
  2. $('#anim').css('background',ugioEf);
  3. $(qwerty).animate({"top": "+=32px"},'slow');
  4. $('#anim').gracz.play();
  5. return false;
  6. }


I dalej ten case odpowiedzialny m.in za odświeżanie diva ojj.

  1. function handleArrowKeys(evt) {
  2. evt = (evt) ? evt : ((window.event) ? event : null);
  3. if (evt) {
  4. switch (evt.keyCode) {
  5. case 37:
  6. go(1,mapID);
  7. odswiezajj();
  8. break;
  9. case 39:
  10. go(2,mapID);
  11. odswiezajj();
  12. break;
  13. case 38:
  14. go(3,mapID);
  15. odswiezajj();
  16. break;
  17. case 40:
  18. go(4,mapID);
  19. odswiezajj();
  20. break;
  21. }
  22. }
  23. }



Funkcji odświeżającej nie podaję, ponieważ nic nie wnosi. Odświeżanie zmiennej w php i przypisanie jej do var qwerty działa.
nospor
No a plik php to niby kiedy jest wykonywany?
NO i podaj te funkcje odswiezajacą, bo to ze tobie sie wydaje ze nic nie wnosi, to wcale nie musi tak byc. Wkoncu to ty masz banalny problem wiec twoja ocena sytuacji niekoniecznie musi byc dobra wink.gif
miati
To jest header, więc wykonywany jest przed załadowaniem pliku js.

Funkcja odświeżająca. Przebudowana, ponieważ domyślnie odświeżała co x sekund. Teraz jest wywoływana w każdym case. W każdym razie ta część działa.


  1. var object = false;
  2. if (window.XMLHttpRequest) object = new XMLHttpRequest();
  3. else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
  4. function getData(dataSource, divID)
  5. {
  6.  
  7. if (object.readyState==4 || object.readyState==0)
  8. {
  9.  
  10. var obj = document.getElementById(divID);
  11.  
  12.  
  13. object.open("GET", dataSource);
  14.  
  15.  
  16. object.onreadystatechange = function()
  17. {
  18.  
  19. if (object.readyState == 4 && object.status == 200)
  20. obj.innerHTML= object.responseText;
  21. }
  22.  
  23. object.send(null);
  24. }
  25. }
  26.  
  27.  
  28. function odswiezajj()
  29. {
  30. getData('odswiez.php','ojj');
  31. setTimeout("odswiezaj()", 1000);
  32. }




Plik odswiez.php generuje sobie po prostu 1. Nie pisz nic o tym kodzie do odświeżania, bo wszystko wiem. Szkoda patrzeć, zwłaszcza to przypisanie zmiennej 1, ale na początek miało działać. A całość niestety nie chce.

  1. $numer =srand (1,1);
  2. echo $numer;
nospor
Jesli to jest plik odswiez.php
srand(time());
$numer =srand (1,1);
echo $numer;
to niby z jakiej racji ma ci dzialac? Przeciez ty tutaj nigdzie nie generujesz na nowo zmiennej js...
miati
Nie wiem co masz na myśli. To DZIAŁA. Sprawdzam wszystko w źródle strony i zmienna, wierz lub nie, się zmienia w pliku php, jednak ani rusz w pliku js.


nospor
Po raz kolejny pisze ci, że ten kod:
srand(time());
$numer =srand (1,1);
echo $numer;

nie ma zadnego związku ze zmianą zmiennej js. Jesli Twoja zmienna js to 'qwerty', to tym kodem php, co tu 3 linijki przed chwilą pokazałem, w zaden sposob jej nie zmieniasz. Tym kodem generujesz losową liczbę. Jaki to ma niby związek ze zmienną js? Zaden
miati
Ten kod generuję liczbę 1, która jest następnie przypisana do pliku js, który podałem wcześniej.
Tamten plik natomiast ODŚWIEŻA diva 'ojj', który odświeża natomiast moją zmienną js.
Kod nie jest mój, więc całą jego interpretację pozostawiam Tobie.

Zmienna js jest aktualizowana w pliku .php, który jest wczytywany przed plikiem js, w którym zmienna już aktualizuje się dopiero pod odświeżeniu strony.
Ale to poplątane.
nospor
Kod co tu podales, nadpisuje zawartosc diva ojj losowo wygenerowaną liczbą - i tyle. W zaden sposob kod ten, nie zmienia zmiennej js qwerty. Interpretacje zostawiam Tobie wink.gif
miati
CO? Poplątałeś się kolego. Już tłumaczę smile.gif
Kog generuje 1, która następnie jest wpisana do tego kodu:

  1. <script language=javascript>
  2.  
  3. var object = false;
  4. if (window.XMLHttpRequest) object = new XMLHttpRequest();
  5. else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
  6. function getData(dataSource, divID)
  7. {
  8.  
  9. if (object.readyState==4 || object.readyState==0)
  10. {
  11.  
  12. var obj = document.getElementById(divID);
  13.  
  14.  
  15. object.open("GET", dataSource);
  16.  
  17.  
  18. object.onreadystatechange = function()
  19. {
  20.  
  21. if (object.readyState == 4 && object.status == 200)
  22. obj.innerHTML= object.responseText;
  23. }
  24.  
  25. object.send(null);
  26. }
  27. }
  28.  
  29. function odswiezajj()
  30. {
  31. getData('odzwiez.php','ojj');
  32. setTimeout("odswiezajj()", 1000);
  33. }
  34.  
  35. </script>


Ooo, tutaj:

  1. function odswiezajj()
  2. {
  3. getData('odswiez.php','ojj');
  4. setTimeout("odswiezajj()", 1000);
  5. }


Nie będę robił z siebie specjalisty od tych spraw, ale to działa. Więc problem nie leży tutaj. Nic nie jest nadpisywane jedynką. Zapewniam Cię, że zmienna qwerty w pliku .php ZMIENIA się (patrząc w źródło strony). żeby jednak zmieniła się w pliku js - muszę odświeżyć stronę ;/
nospor
Co widze, to mowie.

Tym kodem:
obj.innerHTML= object.responseText;
do diva OJJJ przypisujesz wynik odpowiedzi skryptu php. Jesli Twoj kod php, generuje 1, wiec tym kodem do DIV OJJ wpisujesz zawsze 1. I ta jedynka ma sie nijak do jakiejs tam twojej zmiennej js.Tyle w temacie.
miati
Dobrze. Wychodzi na to, że w magiczny, rodem z Harrego Pottera, sposób zmienna jednak się aktualizuje.
Nie wiem jak, nie wiem gdzie, ale aktualizuje się!
Problem w tym, że zmienna nie przechodzi do pliku js.

Ale. Jeśli twierdzisz, że to wina tego (ja się nie znam), to czy mógłbyś podać jakiś kod, który na wywołanie
funkcja(); - odświeży owego diva 'ojj' ?

Byłbym wdzięczny smile.gif
nospor
A w jaki sposob stwierdzasz, ze zmienna ta sie aktualizuje? Pewnie tu jest problem Twojego pogubienia sie wink.gif

Jak chcesz by Twoja zmienna sie aktualizowala, to poprostu generuj te zmienną w kodzie php. Zamiast durnej jedynki, ktora kurcze nic nie robi, generuj swoją zmienną:
<?php
echo '<script type="text/javascript">
qwerty = "nowawartosc";
alert(qwerty);// a tu alert, by sprawdzac czy dziala
</script>';
?>
miati
A widzisz. Wychodzi na to, że zmienia w źródle: var qwerty = **, ale tak naprawdę nie aktualizuje zmiennej. Ja już się naprawdę pogubiłem smile.gif
nospor
1) Ja sie pytam jak ty wczesniej sprawdzales tę rzekomą aktualizację
2) Miało byc bez VAR
3) Alerta dales?
4) I jak teraz sprawdzasz czy sie zakutalizowala? Bo zrodlo strony nie powinno ci tego wykazac, chyba ze korzystasz np. z Firebugu lub sprawdzasz "wygenerowane zrodlo strony"
miati
Jak sprawdzałem? No przez źródło strony. Było tam var qwerty = coś. Nie pytaj smile.gif
Teraz dałem wszystko tak jak napisałeś i alert działa tylko przy odświeżeniu strony tj. nie aktualizuje zmiennej tak jak powinno ;/
Kombinuję cały czas coś z google, ale słabo idzie. smile.gif
Turson
var qwerty = coś czy var qwerty = 'cos' questionmark.gif
nospor
Masz to gdzies wystawione online? Bo w ten sposob nie dojdziemy w zyciu do porozumienia, bo caly czas podajesz sprzeczne informacje. Tak sie nie da pracowac smile.gif
miati
Niestety nigdzie nie mam. Jakich informacji potrzebujesz wink.gif ?
Twój sposób działa, ale alert wyrzuci tylko gdy odświeżę stronę. Chyba, że dałbym kod w inne miejsce.
qwerty = coś to był przykład wink.gif
nospor
Cytat
Jakich informacji potrzebujesz
No wlasnie juz zadnych. Sorki, ale to co piszesz nie trzyma sie kupy. Alert powinien wyskoczyc przy ajax. Znaczy ze albo ty tego ajaxa nie wykonujesz ani razu albo w ogole wszystko mieszasz. Sorki, ale tak nie da sie Tobie pomoc. Albo to wystaw gdzies online, albo czekaj na kogos, kto bedzie sie totalnie nudzil i probowal dojsc co tam namieszales. Ja nie mam czasu na takie zabawy smile.gif
miati
Spróbuję to jakoś ogarnąć.. Dzięki za pomoc wink.gif

Widzisz drogi nosporze, uczę się smile.gif

Jeśli umieszczę kod w taki sposób:
  1. function go_left(){
  2. <?php
  3. if ($uder['y'] <= 8){
  4. $porusz = "'#anim'";
  5. }
  6. else{
  7. $porusz = "'#map'";
  8. }
  9. ?>
  10. qwerty = <?php echo $porusz; ?> ;
  11. alert(qwerty);
  12. $('#anim').css('background',lQwedg);
  13. $(qwerty).animate({"left": "+=32px"},'slow');
  14. $('#anim').gracz.play();
  15. return false;
  16. }


To alert wyświetla się teraz bez odświeżania strony.
Problem w tym, że qwerty nadal nie przyjmuje nowej wartości bez odświeżenia strony.
Jeszcze kilka h i do tego dojdę.
Byłbym wdzięczny jakby ktoś był w stanie jakoś pomóc smile.gif
Turson
Przyjmuje nową wartośc dopiero po odświeżeniu, bo wtedy PHP ponownie analizuje kod i ustala co $porusz zawiera. Żeby to było bez odświeżania to ajax
miati
Jakaś wskazówka czego dokładnie szukać?
Turson
Skąd bierzesz $uder['y']? Jeżeli ma to być dynamicznie zmieniane, to musisz zrobić akcję ajaxa po jakimś evencie
miati
zmienna $uder jest zdefiniowana w innym pliku. Potrzebowałbym czegoś co np. w tym:

  1. switch (evt.keyCode) {
  2. case 37:
  3. go(1,mapID);
  4. break;


Wykona jeszcze właśnie odświeżenie ajaxem danych $uder. Czyli z każdym kliknięciem klawisza z numerem 37 (bodajże strzałka w lewo) odświeży także zmienną.
Dobrze kombinuję?
Pytanie tylko jaki kod zastosować smile.gif
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.