IE - A weblap lejárt


 Sziasztok!
Olyan problémára hívták fel a figyelmem egy weblapommal kapcsolatban, hogy amikor formokat submitolnak, azt az üzenetet kapják az Internet Explorertől (csak IE), hogy "A weblap lejárt". Íme egy PrintScreen
Próbáltam megtalálni a probléma gyökerét, és úgy érzem hogy ez sikerült is, de a megoldást megtalálni, a problémát elhárítani nem tudom.
A helyzet a következő:
Egy JQuery szövegbuborékot használok arra, hogy informáljam a felhasználót a történésekről. Ez úgy történik, hogy van egy function, amit így néz ki:
function ertesites(szov,cim,tip,marad) { if(marad == '1') { ert = true; } else { ert = false; } $.noticeAdd($.extend({ text: szov, title: cim, type: tip, stay: ert })); }
Természetesen a JQuery fájlok szépen betöltve (hangsúlyozom, csak IE-ben van ez a probléma). A functiont így hívom meg egy form submitolása után:
print "<script type='text/javascript'> ertesites(\"A jelszavadnak minimum 6 karakter hosszúnak kell lenni!\",\"Hiba\",\"error\",0); </script>";
Az első paramétert az üzenet szövege, második a cím (fejléc), harmadik a hiba típusa, negyedik pedig, hogy eltűnjön-e magától egy bizonyos idő után.
Azt tapasztaltam, hogy amikor a függvény hívását <script> tag-ek között printelve hívom meg (ahogy most mutattam), akkor jelentkezik a weblap lejárt üzenet. IE-ben egyedül csak akkor jó, amikor ajax híváson keresztül hívom meg a kiprintelt függvényt egy eval függvénnyel.
Valaki találkozott hasonló dologgal? Esetleg valakinek van ötlete, hogy mivel tudnám elhárítani ezt a problémát?
Ha bármi részletre kíváncsiak vagytok, kérezzetek bátran!
Előre is nagyon szépen köszönöm! |
| Mert elküldöd az adatokat POST-al. Ne tedd. Úgyértem ne legyen POST data (űrlap submit) semmilyen JS vagy akármilyen esemény előtt. |
Az a baj, hogy ez nagyjából elkerülhetetlen. Itt egy részlet, talán így világosabb:
if(isset($_GET['modosit1'])){ if($_POST['jelszo'] != NULL && $_POST['jelszo2'] != NULL) { if($_POST['jelszo'] == $_POST['jelszo2']) { if(strlen($_POST['jelszo']) > 5) { mysql_query("UPDATE felhasznalok SET jelszo='".md5($_POST['jelszo'])."' WHERE uid='".$_SESSION['uid']."'"); print "<script type='text/javascript'> ertesites(\"Módosítottad a jelszavadat!\",\"Siker\",\"success\",0); </script>"; }else{ print "<script type='text/javascript'> ertesites(\"A jelszavadnak minimum 6 karakter hosszúnak kell lenni!\",\"Hiba\",\"error\",0); </script>"; } }else{ print "<script type='text/javascript'> ertesites(\"A két jelszó nem egyezik!\",\"Hiba\",\"error\",0); </script>"; } } if($_POST['email'] != NULL && $_POST['email'] != $felhasznalo['email']) { if(check_email_address($_POST['email'])) { mysql_query("UPDATE felhasznalok SET email='".$_POST['email']."' WHERE uid='".$_SESSION['uid']."'"); print "<script type='text/javascript'> ertesites(\"Módosítottad az e-mail címed!\",\"Siker\",\"success\",0); </script>"; }else{ print "<script type='text/javascript'> ertesites(\"Nem valós e-mail címet adtál meg!\",\"Hiba\",\"error\",0); </script>"; } } }
|
Egyet nem értek. Mire jó az, hogy egy üzenetet javascripttel küldesz? Nem lenne egyszerűbb ez?
print "<p>Hibaüzenet.</p>";
Ez azért is jobb lenne, mert akkor mindenkinek megjelenne, mert ha a javascriptet kikapcsolom, akkor már nem kapok semmit vissza.
Szerk.: ez böngészőfüggetlen megoldás. |
| Hehe, ez kétségtelen, de így dizájnosabb, jobban tetszik és már csak azért is kötöm az ebet a karóhoz, mert kíváncsi vagyok, hogy mi az IE baja. |
| Ez a noticeAdd pontosan mit csinál? Nem találtam doksit hozzá. |
Azt hiszem, találtam egy bajt.
Ez helyett...
$.noticeAdd($.extend({ text: szov, title: cim, type: tip, stay: ert }));
... ezt használd:
$.noticeAdd({ text: szov, title: cim, type: tip, stay: ert });
Szerintem így lehet, hogy jó lesz. |
A hiba továbbra is fent áll, ugyan úgy. :(
Viszont megpróbálom egy más úton előidézni az üzenet dobozt. PHP-val, ahogy tanácsoltad, hogy kerüljük a javascriptet egy kicsit.
Az ötlet:
Printelem az üzenet dobozt amikor kell:
print "<div id='alertbox'>üzenet</div>";
És ezt css-el fix pozícióban mindig a képernyő közepén tartom. Viszont a bezárás gomb mindenképpen javascript lesz, amikor leveszem a display-ét az ablaknak. Tehát a js-t nem tudom megkerülni, úgy érzem... |
Na de gondolkoztam, úgy érzem, ez még belefér.
Viszont azt hogy tudnám megcsinálni, hogy két féle ablak legyen? Az egyik muszáj legyen bezárni, a másik fajta pedig egy idő után (2 másodperc) automatikusan eltűnne? |
Hát nem akarok okoskodni, de gondoltál arra, hogyha kikapcsolod a Javascriptet? Akkor nem tudod bezárni a dobozt, és az zavarni fogja a látogatót.
De viszont van megoldás. Nem tudom, hogy használsz-e az oldaladon jQuery UI-t. Abban van egy aranyos funkció, a dialog(). Azt pontosan ilyenhez csinálták, és tényleg szép, és jó. Bővebben:
http://jqueryui.com/demos/dialog/ |
Igazából az egész oldalam használhatatlan, ha a javascriptet kikapcsolja a felhasználó, úgyhogy erre nem építhetek. Ez egy online "nevelgetős" játék lesz, és szerintem azért a felhasználók többsége nem tiltogatja a javascriptet csak úgy poénból.
Persze, a JQuery-t használom, a fent nevezett probléma is abból adódott, ha visszaolvasod. :)
Csak annyi az ellentmondás a sztoriban, hogy ha ezt a JQuery-s dialogot használnám, amit te is linkeltél, és kikapcsolnám a javascriptet, akkor a JQuery sem működne. Ez csupán a probléma. :) |
Egyszerűen. Adok egy kódot hozzá. Remélem nem írom el.
Az UI-t be kell tölteni, hogy működjön.
<script type="text/javascript" language="javascript"> $(document).ready(function(){ $('#egyikablak').dialog(); $('#masikablak').dialog(); var timer = setInterval(function(){ //Bezárás $('#masikablak').dialog('destroy'); }, 2000); //2000 millisecundum, 2 ms }); clearInterval(timer); </script> <div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" id="egyikablak">Tartalom</div> <div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" id="masikablak">Tartalom</div>
Hogyha a JS kell hozzá, akkor meg ilyenen ne akadj fent. |
Köszi szépen, de a JS-t kikerülni nem tudom semmilyen körülmény között. Van ilyen karakter öltöztetős-vetkőztetős-ruhapróbálós rész is, ahol a képek egymáson vannak css z-index-szel, és ott is js-el állítom a láthatóságot.
Viszont továbbra is fent van a labda, hogy miért hal meg az IE a JQuery-s ablakomból. :) |
| Az UI dialog()-tól nem hal meg. Szerintem használd azt. De ha adsz egy részletesebb forrást, akkor megnézném, hátha tudok segíteni. |
|