ugrás a tartalomhoz

Automatikus frissítés

GreenEar · 2014. Jan. 19. (V), 09.57
Sziasztok!

Egy kérdéssel/kéréssel fordulok hozzátok ismét.

A problémám az , hogy egy adott script segítségével szeretném ha az oldal 10 másodpercenként újratöltődne, hogy a mysql-ből lekért adatok automatikusan frissüljenek. Ez eddig működik is, csak az oldalon található egy form is, benne egy textarea, amibe ha pont írnak akkor a frissítés miatt törlődik a begépelt tartalom.
Gondolom kitaláltátok, amolyan chat szerűségről van szó. Beállítottam hogy a script csak akkor fusson le ha a textarea mezőnek az értéke =0. A probléma a következő:

Csak akkor frissül, ha írok valamit a mezőbe majd kitörlöm. Amit szeretnék, hogy 10 másodpercenként frissüljön esemény nélkül, de ha épp szöveget írnak akkor ne frissüljön. Nem tudom mi a hiba, remélem megvilágítjátok hogy mi a baj, a menyasszonyom szerint az hogy belevágtam a chat-dologba.
Bemásolom a scriptemet (enyém mert én loptam egyes egyedül :)) meg a formot is.

Van sok chat-es és oldalrész frissítős fórum a google-ben, de ha mód van rá akkor ezzel szeretném megoldani. Előre is köszönöm a segítséget/kritikát/hozzászólást mindenkinek.


<script type="text/javascript">
window.onload = function () {
frissites();
}
function frissites() {
var value = document.getElementById('szovegmezo').value;
if (value.length == 0) {
window.setTimeout('window.location.reload()', 10000);
}
}
</script> 



<form method="post">

<textarea name="szovegmezo" id="szovegmezo" onkeyup="frissites()"></textarea>

<input type="submit" name="submit" value="mehet">

</form>

 
1

Kézikönyv

Hidvégi Gábor · 2014. Jan. 19. (V), 10.06
Olvasd el a setTimeout leírását, abból kiderül, hogy miért csak egyszer fut le.
2

setTimeout

GreenEar · 2014. Jan. 19. (V), 10.53
Szia

átnéztem a leírását, de nem tudom mi lehet a hiba. A setTimeout csak eseményre reagál? Ez lehet a gond?
3

setTimeout

GreenEar · 2014. Jan. 19. (V), 13.04
átnéztem, megpróbáltam a setInterval-al is de úgysem megy. Elvileg az futtatná le addig amíg le nem állítom.
4

Hibakeresés

Hidvégi Gábor · 2014. Jan. 19. (V), 13.37
5

Nem ez okozza a hibát, de fontos

bamegakapa · 2014. Jan. 19. (V), 14.51
A setTimeout és setInterval függvényeket ne használd úgy, hogy stringet adsz át első paraméterként. Ez egy eval-al egyenértékű. Ha nem tudod, mi a baj vele, szimplán csak kerüld vagy olvass utána, majd kerüld.

Íme a megfelelő használat (függvényt adunk át, nem stringet!):
window.setTimeout(function () {
    window.location.reload(); 
}, 10000);
8

Kell oda az a névtelen függvény? :S

Arnold Layne · 2014. Jan. 19. (V), 17.13
Így nem egyszerűbb?
window.setTimeout(window.location.reload, 10000);
10

Hát, nem tudom, konkrétan a

bamegakapa · 2014. Jan. 19. (V), 19.30
Hát, nem tudom, konkrétan a reload működni fog-e úgy, ha elveszti a contextjét (window.location objektum), de alapból ha meg akarod spórolni a függvényt, akkor minimum egy bind kéne neki:
window.setTimeout(window.location.reload.bind(window.location), 10000);
11

Igaz

Arnold Layne · 2014. Jan. 19. (V), 19.42
Igazad lett, tényleg nem megy. Kipróbáltam Firefoxban, de hibaüzenet lett a vége.
NS_NOINTERFACE: Component does not have requested interface [nsIDOMLocation.reload]
6

...

GreenEar · 2014. Jan. 19. (V), 15.33
köszi az infókat,tanácsokat, a firebug tényleg hasznos jószág hibakeresésre, de a script nem áll meg, lefut rendesen. Nem sikerül átalakítanom egyenlőre úgy hogy az oldalbetöltés csak akkor történjen meg ha a text mező üres. Nem értem mi a baj, ha pl azt állítom be hogy csak akkor fusson le a script ha a mező karakter értéke legalább 5, akkor csak akkor frissít ha 5 karakter van benne. DE ha azt állítom be hogy akkor fusson le ha 0 az érték, akkor már nem.
7

Az eredeti logikád hibás, ha

Hidvégi Gábor · 2014. Jan. 19. (V), 15.51
Az eredeti logikád hibás, ha azon nem változtattál, akkor azért rossz. Menj végig egyesével a sorokon, és próbáld meg elképzelni, hogy pontosan mit is csinál az adott parancs.
9

közönség...

GreenEar · 2014. Jan. 19. (V), 18.44
közönség segítsége?? :) nem találom a hibát.........a baj az hogy annyira benne vagyok hogy szerintem már nem látom a fától az erdőt. Nem tudom hol keressem a hibát.
12

Ha van JavaScript az oldalon

Karvaly84 · 2014. Jan. 19. (V), 20.51
Ha van JavaScript az oldalon miért nem AJAX hívást indítasz az adatbázishoz?

A szövegmezőnek függetlennek kéne lennie mindentől. Submit-ra betolja az adatbázisba az új adatokat a háttérben, a megjelenítést meg egy másik rutin végzi.

Az egész oldalt csináld meg JavaScript nélkül. Jelenítsd meg az adatbázis adatait egy oldalon, tegyél mellé egy űrlapot amin keresztül új adatokat töltesz az adatbázisba. Ha ez megvan akkor AJAX-ositod az oldalt: Az adatokat AJAX-al frissited, az űrlap submit eseményét lekezeled egy eseménykezelővel, amiben össze raksz egy HTTP kérést és betolod adatbázisba az adatokat (evvel egy időben, meg akadályozod az űrlap deault action-jét (tipikussan e.preventDefault()).
13

frame-ek?

szabo.b.gabor · 2014. Jan. 20. (H), 11.18
Ilyent amúgy nem ajánlunk, de hogy kicsit egyszerűbb legyen először csináld meg akár iframe-mel.
<html>
<head></head>
<body>
<form></form>
<!-- a hozzaszolas-lista-ban valositsd meg az automatikus frissitest -->
<iframe src="hozzaszolas-lista.php"></iframe>
</body>
</html>
no ha ez megvan, akkor a következő lépésben már könnyű lesz meglépni az ajax-os megvalósítást. aztán meglátod, hogy chathez ez így még mindig gagyi, de legalább tanultál valamit..
15

:)

GreenEar · 2014. Jan. 21. (K), 08.59
akkor most lett egy gagyi chat-em :):)
16

igen.chat akkor jó, ha van

szabo.b.gabor · 2014. Jan. 21. (K), 09.37
igen. bár ez inkább fórum..

chat akkor jó, ha van folyamatos kapcsolat a két fél között.

viszont van egy elégedett menyasszonyod (ha végre ismét vele foglalkozol) és még okosabb is lettél.

valahol mindenki elkezdi. hajrá!
14

iframe

GreenEar · 2014. Jan. 20. (H), 11.43
hello mindenki!

iframmel csináltam meg a dolgot, az alap oldal ahol a beszélgetés zajlik, ott van a szövegmező meg minden egyéb, a mysql-lekérést pedig egy iframe-be raktam, annál pedig beraktam a scriptet ami frissíti 10 másodpercenként.

Köszönöm mindenkinek a segítséget, van még egy két sötét folt pár dologgal kapcsolatban, de az már egy másik forum lesz. :)


UI: másoljam be a jó megoldást?