miati
9.07.2014, 07:18:33
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
9.07.2014, 07:32:25
Forum wrozbiarskie pietro wyzej.
ps: jesli jednak nie chce ci sie isc pietro wyzej, to moze bys tak laskawie podal kod?
miati
9.07.2014, 07:36:24
Nie krzycz

już podaję

Kod php:
<div id='ojj'>
<?php
if ($uder['y'] <= 8){
$porusz = "'#anim'";
}
else{
$porusz = "'#map'";
}
?>
<script>
var qwerty =
<?php echo ' '.$porusz.' '; ?>;
</script>
</div>
Kod JS :
function go_up(){
$('#anim').css('background',ugioEf);
$(qwerty).animate({"top": "+=32px"},'slow');
$('#anim').gracz.play();
return false;
}
I dalej ten case odpowiedzialny m.in za odświeżanie diva ojj.
function handleArrowKeys(evt) {
evt = (evt) ? evt : ((window.event) ? event : null);
if (evt) {
switch (evt.keyCode) {
case 37:
go(1,mapID);
odswiezajj();
break;
case 39:
go(2,mapID);
odswiezajj();
break;
case 38:
go(3,mapID);
odswiezajj();
break;
case 40:
go(4,mapID);
odswiezajj();
break;
}
}
}
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
9.07.2014, 07:40:06
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
miati
9.07.2014, 07:47:41
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.
var object = false;
if (window.XMLHttpRequest) object = new XMLHttpRequest();
else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
function getData(dataSource, divID)
{
if (object.readyState==4 || object.readyState==0)
{
var obj = document.getElementById(divID);
object.open("GET", dataSource);
object.onreadystatechange = function()
{
if (object.readyState == 4 && object.status == 200)
obj.innerHTML= object.responseText;
}
object.send(null);
}
}
function odswiezajj()
{
getData('odswiez.php','ojj');
setTimeout("odswiezaj()", 1000);
}
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.
nospor
9.07.2014, 07:52:36
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
9.07.2014, 07:54:48
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
9.07.2014, 08:00:33
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
9.07.2014, 08:05:15
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
9.07.2014, 08:08:44
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
miati
9.07.2014, 08:12:36
CO? Poplątałeś się kolego. Już tłumaczę

Kog generuje 1, która następnie jest wpisana do tego kodu:
<script language=javascript>
var object = false;
if (window.XMLHttpRequest) object = new XMLHttpRequest();
else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
function getData(dataSource, divID)
{
if (object.readyState==4 || object.readyState==0)
{
var obj = document.getElementById(divID);
object.open("GET", dataSource);
object.onreadystatechange = function()
{
if (object.readyState == 4 && object.status == 200)
obj.innerHTML= object.responseText;
}
object.send(null);
}
}
function odswiezajj()
{
getData('odzwiez.php','ojj');
setTimeout("odswiezajj()", 1000);
}
</script>
Ooo, tutaj:
function odswiezajj()
{
getData('odswiez.php','ojj');
setTimeout("odswiezajj()", 1000);
}
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
9.07.2014, 08:14:45
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
9.07.2014, 08:17:44
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
nospor
9.07.2014, 08:21:18
A w jaki sposob stwierdzasz, ze zmienna ta sie aktualizuje? Pewnie tu jest problem Twojego pogubienia sie

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
9.07.2014, 08:26:16
A widzisz. Wychodzi na to, że zmienia w źródle: var qwerty = **, ale tak naprawdę nie aktualizuje zmiennej. Ja już się naprawdę pogubiłem
nospor
9.07.2014, 08:32:43
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
9.07.2014, 08:37:16
Jak sprawdzałem? No przez źródło strony. Było tam var qwerty = coś. Nie pytaj

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.
Turson
9.07.2014, 08:38:27
var qwerty = coś czy var qwerty = 'cos'
nospor
9.07.2014, 08:39:31
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
miati
9.07.2014, 08:45:39
Niestety nigdzie nie mam. Jakich informacji potrzebujesz

?
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
nospor
9.07.2014, 08:48:11
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
miati
9.07.2014, 10:33:32
Spróbuję to jakoś ogarnąć.. Dzięki za pomoc

Widzisz drogi nosporze, uczę się

Jeśli umieszczę kod w taki sposób:
function go_left(){
<?php
if ($uder['y'] <= 8){
$porusz = "'#anim'";
}
else{
$porusz = "'#map'";
}
?>
qwerty =
<?php echo $porusz; ?> ;
alert(qwerty);
$('#anim').css('background',lQwedg);
$(qwerty).animate({"left": "+=32px"},'slow');
$('#anim').gracz.play();
return false;
}
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
Turson
9.07.2014, 10:37:48
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
9.07.2014, 10:41:59
Jakaś wskazówka czego dokładnie szukać?
Turson
9.07.2014, 10:45:26
Skąd bierzesz $uder['y']? Jeżeli ma to być dynamicznie zmieniane, to musisz zrobić akcję ajaxa po jakimś evencie
miati
9.07.2014, 10:50:43
zmienna $uder jest zdefiniowana w innym pliku. Potrzebowałbym czegoś co np. w tym:
switch (evt.keyCode) {
case 37:
go(1,mapID);
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ć
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.