Ablak bezárása előtti esemény
Segítségetek szeretném kérni. Meg kell oldanom azt, hogy ha bezár az user egy ablakot akkor előtte még egy adatbázisba írjon adatot.
Van most egy megoldásom, de nem 100%-ban működik (legtöbbször igen, de néha nem), most olyat keresek ami 100%-os. Eddig van egy ilyenem:
Kód:
window.onbeforeunload=function(){jatektorol();alert ('Sikeresen kijelentkeztél a játékból!');}
a jetektorol() függvény küldi ajaxxal a php-nek a kilépést. Az alert azért van ott, mert vagy a chrome-ban vagy a firefoxban csak azzal működik, alert nélkül nem. Ez így egy eléggé 'összeszögelt' megoldás, abban sem vagyok biztos, hogy javascripttel lehet megoldani. Még a sessiont sem használtam sosem, lehet abban lenne a megoldás de nem találok róla jó magyar nyelvű leírást amiből megérteném mire is jó az.
re: Ablak bezárása előtti esemény
Igy mar menni fog:
Idézet:
lauda eredeti hozzászólása
Kód:
window.onbeforeunload=function(){
jatektorol();
alert ('Sikeresen kijelentkeztél a játékból!');
return false;
}
---------------
re: Ablak bezárása előtti esemény
100%-os megoldásban ne is reménykedj. User letiltja a JS-t, user kihúzza a tápkábelt/hálókábelt a gépből, stb... Ami a legközelebb áll a 100%-hoz, ha fordítva közelíted meg. JS setTImeout-tal beállítasz egy időzítést ami mondjuk 3 percenként odaszól a szervernek, hogy "még itt vagyok". A szerveren meg ha eltelt 3 és fél perc és nem jött ilyen üzenet, akkor kijelentkezteti. Persze meg lehet hagyni a fenti megoldást is mellette, akkor 99%-ban azonnal megtörténik a kiléptetés, néha meg max 3 perccel később.
Arra figyelj szerver oldalon, hogy mi van, ha 3 percen belül újra belép, nem zavarodjon össze a szerver!
re: Ablak bezárása előtti esemény
Valoban nem 100%-os. setTimeout helyett setInterval jobb mert akkor az X idonkent odaszol a szervernek. A legjobb ugye a masodpercenkent lenne, de az kinyirja a legtobb szervert, ezert en inkabb nodejs-el, vagy rubyval(puma) csinalnek ilyen alkalmazast.
Nodejs-hez van a socket.io(Socket.IO: the cross-browser WebSocket for realtime apps.), amivel par soros koddal tudsz egy long polling alkalmazast osszerakni.
re: Ablak bezárása előtti esemény
Megcsináltam Geri amit írtál. Már emlékszem rá utólag hogy próbálkoztam vele korábban. A return false-tól egy üzenetablak ugrik fel firefoxban (chrome-ban nem): 'Az oldal azt kéri, hogy erősítse meg kilépési szándékát – a beírt adatok nem feltétlenül vannak mentve.'. Előtte meg persze azt is, hogy 'Sikeresen kijelentkeztél a játékból.' Kicsit így nem felhasználóbarát mert 2 ablakot is be kell zárnia a játékosnak mielőtt kilép, de már azt sem bánom csak ne ragadjon be a tag a játékban. Köszi a nodejs tippet ezt nem ismertem, elolvasom. A helyzet az, hogy már kész a játék ezt a hibáját akarom kijavítani, ami jó szivatós mert 10-ből 1x fordul elő. A settimeout -ban lehet el kell gondolkodnom, de a szervert mindképp kímélnem kell, így is van 3 másodpercenként lekérdezés. A játékot most megcsinálom úgy hogy ti is ki tudjátok próbálni, estére lehet kész lesz, akkor majd beteszem a linket. Köszi az eddig tippet mindkettőtöknek.
re: Ablak bezárása előtti esemény
Megcsináltam úgy hogy ti is lássátok miről van szó. Betettem a honlap kritikába zsírozás kártyajáték címmel.