Autor | Zpráva | ||
---|---|---|---|
user243 Profil |
#1 · Zasláno: 6. 6. 2013, 08:48:15
Dobrý den,
potřeboval bych poradit, jak provést kontrolu formuláře se zpožděním třeba půl sekundy; o zpoždění mi jde proto, protože v tu dobu načítám přes ajax kontrolní data ze serveru, které pak porovnávám ve vlastní kontrole formuláře; document.getElementById("formular").onsubmit = function() {prirazeni(); return false;}; function prirazeni() { // spuštění kontroly se zpožděním setTimeout(kontrola(), 5000); // 5000 pro test /* * načítání dat ze serveru a jejich přiřazení jako hodnoty pro určité pomocné inputy typu hidden */ } function kontrola() { /* * tady probíhá samotná kontrola formuláře, včetně porovnávání s daty z pomocných inputů a pokud je vše v pořádku, javascript formulář odešle */ } formulář se mi kontroluje hned bez nějakého časového prodlení a v tu dobu nemám ještě data ze serveru, i když to testuji na localhostu (ověřeno přes alert()), takže potřeba stisknout submit dvakrát; díky za rady. |
||
jenikkozak Profil |
#2 · Zasláno: 6. 6. 2013, 08:51:26
Proč data nezkontroluješ až poté, co máš kladnou odpověď ze serveru?
|
||
aDAm Profil |
#3 · Zasláno: 6. 6. 2013, 09:19:25
Po submitu si zavolat ty data ze serveru pomocí ajaxu a v onsucess akci si udělat samotné ověření?
|
||
_es Profil |
user243:
var formular = document.getElementById("formular"); formular.onsubmit = prirazeni; function prirazeni() { /* * načítání dat ze serveru a jejich přiřazení jako hodnoty pro určité pomocné inputy typu hidden */ Nastavíš udalosť príslušnému objektu XMLHttpRequest tak, aby po úspešnom načítaní dát zo servera spustil funkciu kontrola. return false; } |
||
user243 Profil |
#5 · Zasláno: 6. 6. 2013, 12:26:54
zjistil jsem, že byla chyba mezi klávesnicí a židlí (nedal jsem funkci kontrola do uvozovek)
setTimeout( "kontrola() ", 5000);
spustit kontrolu až potom, co dostanu data za serveru je určitě elegantnější a jistější, ale jak zajistit, aby se kontrola spustila jen jednou a až budu mít data i z předchozích volání; pokoušel jsem se totiž napsat takovou univerzální funkci pro ajax pro vícero použití, takže by mi vícero volání spouštělo stejný počet kontrol; napadlo mě přidat poslednímu volání ještě parametr, že po úspěšném získání dat má provést kontrolu, ale není tam jistota, že mám i data (aktuální) z předchozího volání; nebo si myslíte, že spustit víckrát kontrolu v relativně rychlém sledu moc nevadí (v kontrole při chybné hodnotě nastavuji danému inputu focus a protože jde o registraci, ajax posílá data metodou POST)? |
||
_es Profil |
#6 · Zasláno: 6. 6. 2013, 12:36:56
user243:
„aby se kontrola spustila jen jednou“ Počet kontrol sa snáď dá počítať, alebo nerozumiem, čo myslíš pod tým „len jednou“. „až budu mít data i z předchozích volání“ Ak „len jednou“, aké prechádzajúce volania? |
||
user243 Profil |
#7 · Zasláno: 6. 6. 2013, 13:54:17
funkce prirazeni totiž vypadá takto:
function prirazeni() { // spuštění kontroly se zpožděním setTimeout("kontrola()",500); // přiřazení ajax("POST", "XXX.php", "nick=" + nick.value, "nick_", true); ajax("POST", "XXX.php", "admin=" + admin.value, "admin_", true); }; takže takhle získávám data za serveru do pomocných inputů; jsou to dvě volání téže funkce, kde se na sobě nezávisle provede komunikace se serverem a tedy stejně tak práce s objektem XMLHttpRequest; |
||
_es Profil |
user243:
No tak si teda funkciu ajax uprav tak, aby sa ňou dala nastaviť aj iná reakcia na udalosť úspešného vrátenia dát zo servera než len zapísanie vrátených dát do nejakého elementu.
Prečo pre získanie dát vytváraš viac ako jeden HTTP dotaz a nezískaš všetky potrebné dáta z jedného? |
||
user243 Profil |
#9 · Zasláno: 7. 6. 2013, 08:41:46
je nějaký způsob volání funkce s parametry, kde jeden z parametrů bude další funkce s parametry?
|
||
_es Profil |
user243:
„jeden z parametrů bude další funkce s parametry“ Jeden z parametrov môže byť funkcia. O parametroch má zmysel sa baviť pri jej definícii, či jej volaní, nie keď je funkcia použitá ako hodnota. Viď aj Časté potíže, zajímavosti a poučné debaty » Rozdíl mezi voláním funkce a funkcí. |
||
user243 Profil |
#11 · Zasláno: 7. 6. 2013, 10:10:00
nejsem z toho moudrý, zkoušel jsem to s nedefinovanou funkcí už před tím
ajax("POST", "XXX.php", "nick=" + nick.value, "nick_", true, function("POST", "XXX.php", "admin=" + admin.value, "admin_", true) {ajax(p1, p2, p3, p4, p5, function() {kontrola();});}); už ne, spustí se znovu za 100ms, a když ano, spustí se kontrola formuláře; |
||
_es Profil |
#12 · Zasláno: 7. 6. 2013, 10:19:38
user243:
A ako máme vedieť, ako tá tvoja funkcia ajax vyzerá? Môžeš trebárs použiť a upraviť si inú funkciu: Univerzální funkce pro AJAX.
|
||
Chamurappi Profil |
#13 · Zasláno: 7. 6. 2013, 10:36:41
Reaguji na usera243:
„funkce prirazeni totiž vypadá takto“ Proč posíláš požadavky dva? To by nešlo posoudit oba údaje najednou? „zkoušel jsem to s nedefinovanou funkcí už před tím“ To máš nějaké hodně zamotané. Dát za function do závorek něco jiného než názvy proměnných je vždy chyba.
Zkus si prohlédnout a použít moji funkci na AJAX. |
||
user243 Profil |
o Citrónu vím, ale vychází z příkladů na w3schools;
díky Chamurappi, tvůj příklad na call back mi funkci podstatně zjednodušil; posílal jsem dva požadavky, protože jsem čekal logickou hodnotu; takže teď je posílám současně a odpověď dávám do jednoho inputu, ze kterého porovnávám první a druhý znak řetězce; volání vypadá tedy takto: ajax("POST", "XXX.php", "nick=" + nick.value + "&admin=" + admin.value, function(odpoved) {document.getElementById("help_input").value = odpoved; kontrola()}); if (ajax(...)) ... |
||
juriad Profil |
#15 · Zasláno: 7. 6. 2013, 14:40:58
user243:
„šlo by získat "odpoved" nějak přímo, aby se dalo třeba použít“ Nejde to, může za to to první A z názvu AJAX. Pokud by tomu tak bylo, tak by se ti prohlížeč nutně zaseknul do doby než by přišla odpověď, což na pomalé síti můžou být třeba desítky sekund. |
||
Časová prodleva: 11 let
|
0