Autor Zpráva
Enko
Profil
Ahoj,
mám přihlašovací formulář, který v PHP pomocí LDAP ověřuje uživate z Active Directory. A rád bych, aby po stisknutí Submit tlačítka z HTML formuláře se zobrazil animovaný GIF (stačí v pouze v IE 9-10), protože odpověd z AD někdy několik vteřin trvá. Můj kód níže sice po stisknutí Submitu zobrazí GIF,a le ten není animovaný, ukáže jen provní frame z GIFu. Má někdo nějaký náapd, jak se dá udělat aby po stisknutí Submitu se okázal animovaný GIF?

můj kód:
        <div id="upload" style="display:none;">
         <img src="<?php echo APP_ROOT;?>/images/loading.gif" alt="Prosím čekejte...">
         <p>Ověřuji...</p>
         <br>
         </div>
       <table>
        <form action="" method="POST" onsubmit="document.getElementById('upload').style.display = 'inline';">    
         <td><label for="username">Uživatelské jméno: </label></td>
         <td><input id="username" type="text" name="username" size="30" maxlength="99" value="<?php if(isset($_POST["username"])){echo htmlspecialchars($_POST["username"]);} ?>"/></td> 
        </tr>
        <tr>
         <td><label for="password">Heslo: </label></td>
         <td><input id="password" type="password" name="password" size="30" maxlength="99"/></td>        
        </tr>
        <tr>
        <td>&nbsp;</td>
        <td><input type="submit" name="submit" value="&nbsp;&nbsp;&nbsp;&nbsp;Přihlásit&nbsp;&nbsp;&nbsp;&nbsp;" /></td>
       </tr>
       </form>
      </table>
Jozin
Profil
Zdravím,

je nějaký důvod, proč nepoužiješ AJAX? Aplikace je stejně závislá na javascriptu a tak by to ani nevadilo.

Každopádně jsem se pokusil o rozjetí příkladu a problém s freeznutým gifem jsem neměl, funguje gif, když ho do stránek vložiš jen tak bez skrytí?
Chamurappi
Profil
Reaguji na Enka:
protože odpověd z AD někdy několik vteřin trvá
Kdy přesně ke zdržení dochází? Pokud server už začal něco vracet (a pak teprve je čekání), je možné, že prohlížeč rezignuje na překreslování dosavadní stránky.

Pokud je GIF viditelný celou dobu, zamrzne také animace v okamžiku odeslání? Jestli ne, zkusil bych dělat něco jiného než jeho prosté zviditelnění. Třeba přesun. Mít ho absolutně odpozicovaný mimo stránku a zrušit mu position místo display.


Reaguji na Jozina:
Aplikace je stejně závislá na javascriptu
Jak jsi to poznal? Já v uvedeném kódu nic závislého nevidím.

je nějaký důvod, proč nepoužiješ AJAX?
Nefungovalo by mu prohlížečové tlačítko zpět. Ani nevíme, co všechno dál by musel řešit. Když si představím prostý přihlašovací formulář, který by se měl AJAXem přetvořit za nějaké administrační rozhraní…
Jozin
Profil
Chamurappi:
<form action="" method="POST" onsubmit="document.getElementById('upload').style.display = 'inline';">  
podle mě v onsubmit je javascript, který se vykoná.

při přihlašování tlačítko zpět? K čemu by to bylo? Pokud se přihlásím a dám zpět, předpokládám, že budu přihlášen, nebo nějak nevím jak přesně to myslíš.
Chamurappi
Profil
Reaguji na Jozina:
podle mě v onsubmit je javascript, který se vykoná
S vypnutým skriptováním se člověk pořád normálně přihlásí, akorát neuvidí loading.gif, což je mnohem menší problém, než kdyby nefungovalo nic (tomu bych říkal závislost na JS).

při přihlašování tlačítko zpět? K čemu by to bylo?
Co to je za otázku? Tlačítko zpět je k cestě zpět. Pokud se mění hlavní obsah stránky, uživatel očekává, že tlačítkem zpět se dostane k předchozímu stavu. Ptát se, proč by to někdo dělal, mi přijde divné.
Jozin
Profil
Chamurappi:
S ajaxem to může být zrovna tak, jako například mám formulář, který funguje sám o sobě, při funkčním javascriptu je ovšem odesílání transformováno a data jsou odesílána přes javascript.

Nejspíš si nerozumíme, pokud jsem byl někde na nějaké stránce, tlačítko zpět funguje, také je běžná praxe, že se stránka po zpracování formuláře reloadne. Moje otázka, proč by někdo chtěl dávat zpět (tedy zpět = nepřihlašuj se), když zrovna klepne na přihlásit se? Pokud se dlouho nejde přihlásit, tak tlačítko zpět funguje tak, že se prostě vrátím zpátky, stejně tak jako bez ajaxu. Navíc ajax != znemožnění funkčnosti tlačítka zpět, pokud tedy není celá stránka ajaxová.
Chamurappi
Profil
Reaguji na Jozina:
při funkčním javascriptu je ovšem odesílání transformováno a data jsou odesílána přes javascript
Tak to mimochodem funguje tady na diskusi, i tvůj příspěvek se odeslal přes AJAX (po němž následovalo nalistování nové stránky). Ale neříkal bych, že je aplikace stejně závislá na JS. Je to tedy jen terminologická nuance.

proč by někdo chtěl dávat zpět (tedy zpět = nepřihlašuj se), když zrovna klepne na přihlásit se?
Myslel jsem okamžik po přihlášení. Z tvé rady nebylo patrné, co by se mělo dít v okamžiku, kdy se ze serveru stáhne odpověď. Většinou se nějak zobrazuje, případně nahrazuje kus obsahu, málokdy se přehazuje na jinou stránku… a pokud tedy člověk zůstane na té samé stránce, tlačítkem zpět se nedostane ke stavu před odesláním formuláře (pokud to autor webu netriviálně neošetří).
Enko
Profil
Děkuju všem za reakce.

Jozin:
je nějaký důvod, proč nepoužiješ AJAX?
Protože nevím jak :-) Ale budu rád za jakýkoliv příklad nebo manuál, jak na to.

Každopádně jsem se pokusil o rozjetí příkladu a problém s freeznutým gifem jsem neměl, funguje gif, když ho do stránek vložiš jen tak bez skrytí?
Ano, když zobrazí samostatný gif ve stránce, tak je animovaný. Stejné řešení jsem používal i ve formuláři pro upload souborů na server a tam při stejném kódu byl stejný obrázek animovaný.

Chamurappi:
Kdy přesně ke zdržení dochází? Pokud server už začal něco vracet (a pak teprve je čekání), je možné, že prohlížeč rezignuje na překreslování dosavadní stránky.
Vyplním formulář viz můj kód, dám Submit, odešlou se data na doménový řadič ke zpracování a čekám než mi vrátí výsledek, zda je uživatel oprávněn k přístupu nebo ne (na pozadí je MSSQL databáze a nad ní je ještě několik vrstev, které zpracovávají přijatá data). Tzn je to stejné jako bych poslal časově náročný dotaz do jakékoliv databáze a čekal výpis na stejné stránce. A když mi doménový řadič vrátí, že uživatel může dál, tak přesměruju headerem tam, kam je potřeba.

Pokud je GIF viditelný celou dobu, zamrzne také animace v okamžiku odeslání? Jestli ne, zkusil bych dělat něco jiného než jeho prosté zviditelnění. Třeba přesun. Mít ho absolutně odpozicovaný mimo stránku a zrušit mu position místo display.
OKi, zítra zkusím. Děkuji za nápad.

Reaguji na Jozina:
„Aplikace je stejně závislá na javascriptu“
Jak jsi to poznal? Já v uvedeném kódu nic závislého nevidím.
Aplikace není závislá na JS. JS tam mám snad jen tento viz příklad. Jinak vše ostatní zpracovává server.

„je nějaký důvod, proč nepoužiješ AJAX?“
Nefungovalo by mu prohlížečové tlačítko zpět. Ani nevíme, co všechno dál by musel řešit. Když si představím prostý přihlašovací formulář, který by se měl AJAXem přetvořit za nějaké administrační rozhraní…

To, že by nefungovalo tlačítko zpět by v tomto případě nevadilo. Tento přihlašovací formulář zobrazím vždy, když není uživatel přihlášen (pomocí $_SESSION).

A co se týče dalších věcí okolo JS, tak víc v JS nemám, protože v JS moc nedělám a moc v něm neumím. Alespoň zatím :-) Každopádně děkuju za podměty. Nemáte někdo odkaz na nějaký praktický příklad s AJAXEM, který by byl použitelný pro můj příklad výše?
Enko
Profil
Tak výsledek je takový, že když nechám animovaný gif celou dobu na stránce viditelný, stisknu tlačítko Submit a gif zamrzne na framu, na kterém je v okamžiku stisknutí tlačítka Submit. Napadá někoho nějaké jiné řešení?


Tak už jsem to vyřešil podle tohoto návodu. A funguje přesně podle očekávání.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: