-
Migrace z Joomla 1.5, 2.5 a 3.x do nové Joomla 6
Bong ·
- X Online Joomla bar xunil ·
-
Phoca Cart - pluginy dopravy
H13 ·
-
Nový joomlaportal.cz
Linelabcz ·
-
Amanus - nová šablona Astroid frameworku podporující Phoca Cart
H13 ·
- X Claude Code a VS Code - kompromitace xunil ·
-
Phoca Download - verze 6.1.6 vydána
H13 ·
-
Phoca Cart - Booking
H13 ·
Vyřešeno Kde mám chybu?
- Cony
-
- Pryč
- Moderátor
-
Méně
Více
- Příspěvky: 5174
27. říj 2015 22:53 - 27. říj 2015 22:55 #124208
od Cony
Odpověď od Cony v tématu Kde mám chybu?
Zase mícháte hrušky a jabka.
Z AJAX jste udělal klasické odeslání formuláře. To že se Vám zobrazí bílá stránka znamená že v souboru lmenutest.php nic nevypisujete. To že jste přidal history.go(-1) (i když ten zápis je zase šílený) znamená to, že na klienta pošlete skript, který mu řekne, že se má vrátit v hostorii o jeden krok zpět.
Principielně všechno špatně
Jednoduchý příklad na AJAX odeslání formuláře naleznete např. zde . Nebo pro ještě jednodušší řešení, můžete využít nějaký plugin pro jQuery.
Z AJAX jste udělal klasické odeslání formuláře. To že se Vám zobrazí bílá stránka znamená že v souboru lmenutest.php nic nevypisujete. To že jste přidal history.go(-1) (i když ten zápis je zase šílený) znamená to, že na klienta pošlete skript, který mu řekne, že se má vrátit v hostorii o jeden krok zpět.
Principielně všechno špatně
- místo AJAX (tedy asynchorního volání, na které uživatel nemusí čekat) načítáte celou stránku a to dokonce dvakrát (odeslání a vrácení se v historii)
- stránka pro odeslání (lmenutest.php ) Vám zůstane v historii prohlížeče, zkuste po odeslání dát v prohlížeči "Vpřed", formulář se Vám "odešle" znovu
- Neustále ten AJAX (nebo prosté odeslání) řešíte mimo strukturu Joomly, ve vlastních souborech. Za prvé je to zbytečně složité, za druhé obcházíte bezpečnostní mechanismy Joomly. Zbytečně riskujete hack.
Jednoduchý příklad na AJAX odeslání formuláře naleznete např. zde . Nebo pro ještě jednodušší řešení, můžete využít nějaký plugin pro jQuery.
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
27. říj 2015 23:25 #124212
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
díky prostuduji si to
stejně jsem se chtěl k ajaxu vrátit.
stejně jsem se chtěl k ajaxu vrátit.
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
28. říj 2015 12:55 - 28. říj 2015 12:57 #124215
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
pustil jsem se do toho znovu od počátku abych to mohl udělat ajaxem
vím, že nemohu použít document.form.form3.value;
ale za boha nemohu nikde najít, jak z jQuery(form).find('[name=form2]') zjistím zda je zaškrtnut nebo ne. Vrací to objekt.
Nemohu to nikde vygooglit. Poraďte prosím
Code:
<form name="form">
<input type="checkbox" name="form2">
<input type="checkbox" name="form3">
<a href="javascript:formajax();">OK</a>
</form>
<script>
function formajax(){
var p1 = jQuery(form).find('[name=form2]');
window.alert(p1);
var p2 = document.form.form3.value;
window.alert(p2);
}
</script>
vím, že nemohu použít document.form.form3.value;
ale za boha nemohu nikde najít, jak z jQuery(form).find('[name=form2]') zjistím zda je zaškrtnut nebo ne. Vrací to objekt.
Nemohu to nikde vygooglit. Poraďte prosím
- Cony
-
- Pryč
- Moderátor
-
Méně
Více
- Příspěvky: 5174
28. říj 2015 14:53 #124216
od Cony
Odpověď od Cony v tématu Kde mám chybu?
Protože žádnou proměnou form nemáte definovanou. Použijte třeba
a
Code:
function formajax(form) {
a
Code:
<a href="javascript:formajax(this.form);">OK</a>
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
28. říj 2015 22:45 - 28. říj 2015 22:56 #124223
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
tak jsem to dal v ajaxu:
Omlouvám se za celý kód
pokud mám něco ještě nepřesně, rád přivítám připomínky.
existuje nějaká možnost, jak sem dostat hodnoty z databáze (abych mohl předvyplnit pole formuláře nebo se musím opravdu pustit do vlastního modulu?
PS Vaše předchozí odpověď nebyla vidět, objevila se až teď po napsání dalšího příspěvku. Možná nějaká chyba při stránkování na portálu
PS2 studuji ajax zde - api.jquery.com/jquery.ajax/
nepochopil jsem parametr traditional a complete
Code:
<form name="form">
<input type="checkbox" name="form2" /> <span style="color: #999999;">Skryj moje umístění na mapě</span><br><br>
<input type="checkbox" name="form3"/> <span style="color: #999999;">Změň svoji pozici na mapě</span><br>
<input type="checkbox" name="form4"/> <span style="color: #999999;">Skryj vzdálenost</span><br>
<input type="checkbox" name="form5"/> <span style="color: #999999;">Skryj datum přihlášení</span><br>
<input type="checkbox" name="form6"/> <span style="color: #999999;">Skryj koho jsem návštívil</span><br>
<input type="checkbox" name="form7"/> <span style="color: #999999;">Skryj reklamy</span><br>
<a href="javascript:formajax();"><img src="../images/tl_refresh_a.png" ></a>
</form>
<script>
function formajax(){
jQuery(function(){
if (document.form.form2.checked==true){ var p1 = "1";} else {var p1 = "0";};
if (document.form.form3.checked==true){ var p2 = "1";} else {var p2 = "0";};
if (document.form.form4.checked==true){ var p3 = "1";} else {var p3 = "0";};
if (document.form.form5.checked==true){ var p4 = "1";} else {var p4 = "0";};
if (document.form.form6.checked==true){ var p5 = "1";} else {var p5 = "0";};
if (document.form.form7.checked==true){ var p6 = "1";} else {var p6 = "0";};
jQuery.ajax({
url: '/components/com_lovefactory/models/lmenu.php',
data: {d1: p1, d2: p2,d3: p3, d4: p4, d5: p5, d6: p6}})
.done(function(){
console.log('Odeslano');})
.fail(function(){
console.log('Odeslání selhalo');});},
function(error){
console.log(error.message);
});
}
</script>
Omlouvám se za celý kód
pokud mám něco ještě nepřesně, rád přivítám připomínky.
existuje nějaká možnost, jak sem dostat hodnoty z databáze (abych mohl předvyplnit pole formuláře nebo se musím opravdu pustit do vlastního modulu?
PS Vaše předchozí odpověď nebyla vidět, objevila se až teď po napsání dalšího příspěvku. Možná nějaká chyba při stránkování na portálu
PS2 studuji ajax zde - api.jquery.com/jquery.ajax/
nepochopil jsem parametr traditional a complete
- Cony
-
- Pryč
- Moderátor
-
Méně
Více
- Příspěvky: 5174
29. říj 2015 14:13 #124227
od Cony
Odpověď od Cony v tématu Kde mám chybu?
traditional - kvůli zpětné kompatibilitě se staršími verzemi JjQuery, nevíte-li proč ho použít, nepoužívejte
complete - callback funkce, která se zavolá po dokončení volání ajax, dnes již zastaralá metoda. Používáte správně .done() a .fail(), complete neřešte.
Ve funkci formajax voláte přidání události domready (ta část jQuery(function(){) to mi přijde jako nesmysl, funguje Vám ten kód vůbec?
Celeé by jste si to mohl zjednodušit funkcí serialize:
complete - callback funkce, která se zavolá po dokončení volání ajax, dnes již zastaralá metoda. Používáte správně .done() a .fail(), complete neřešte.
Ve funkci formajax voláte přidání události domready (ta část jQuery(function(){) to mi přijde jako nesmysl, funguje Vám ten kód vůbec?
Celeé by jste si to mohl zjednodušit funkcí serialize:
Code:
function formajax(form){
jQuery.ajax({
url: '/components/com_lovefactory/models/lmenu.php',
data: jQuery(form).serialize()
}).done(function(){
console.log('Odeslano');
}).fail(function(){
console.log('Odeslání selhalo');
});
}
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
29. říj 2015 15:54 - 29. říj 2015 16:02 #124229
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
funguje a správně.
co pošle to data: jQuery(form).serialize() ? Předpokládám, že všechny hodnoty formuláře.
To bych si pak zase musel pořešit ten checkbox v php?
a ještě:
existuje nějaká možnost, jak sem dostat hodnoty z databáze (abych mohl předvyplnit pole formuláře nebo se musím opravdu pustit do vlastního modulu?
co pošle to data: jQuery(form).serialize() ? Předpokládám, že všechny hodnoty formuláře.
To bych si pak zase musel pořešit ten checkbox v php?
a ještě:
existuje nějaká možnost, jak sem dostat hodnoty z databáze (abych mohl předvyplnit pole formuláře nebo se musím opravdu pustit do vlastního modulu?
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
29. říj 2015 16:26 - 29. říj 2015 16:29 #124230
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
použil jsem Vaší rady a zjednodušil to takto:
na to serialize jsem si netroufl, to zatím zcela nechápu.
potřeboval bych po tom provedení ajaxu udělat reload stránky, jde to tady někde?
Done je předpokládám, že se to úspěšně odeslalo tomu php a ne že to php proběhlo.
Code:
function formajax(form){
if (document.form.form2.checked==true){ var p1 = "1";} else {var p1 = "0";};
if (document.form.form3.checked==true){ var p2 = "1";} else {var p2 = "0";};
if (document.form.form4.checked==true){ var p3 = "1";} else {var p3 = "0";};
if (document.form.form5.checked==true){ var p4 = "1";} else {var p4 = "0";};
if (document.form.form6.checked==true){ var p5 = "1";} else {var p5 = "0";};
if (document.form.form7.checked==true){ var p6 = "1";} else {var p6 = "0";};
jQuery.ajax({
url: '/components/com_lovefactory/models/lmenu.php',
data: {d1: p1, d2: p2,d3: p3, d4: p4, d5: p5, d6: p6}
}).done(function(){
window.alert('Data úspěšně uložena');
}).fail(function(){
console.log('Odeslání selhalo');
});
}
na to serialize jsem si netroufl, to zatím zcela nechápu.
potřeboval bych po tom provedení ajaxu udělat reload stránky, jde to tady někde?
Done je předpokládám, že se to úspěšně odeslalo tomu php a ne že to php proběhlo.
- Cony
-
- Pryč
- Moderátor
-
Méně
Více
- Příspěvky: 5174
29. říj 2015 17:31 #124231
od Cony
Když používáte AJAX nedělejte reload stránky, to by trochu postrádalo smysl. AJAX je právě přeci o tom, že reload neuděláte, uživatele s ním "neotravujete". Ve funkci.done() si pořeště konkrétní elementy.
Odpověď od Cony v tématu Kde mám chybu?
.done() je po získání odpovědi ze serveru, tedy po provedení PHP na serveru.ernst napsal: Done je předpokládám, že se to úspěšně odeslalo tomu php a ne že to php proběhlo.
Když používáte AJAX nedělejte reload stránky, to by trochu postrádalo smysl. AJAX je právě přeci o tom, že reload neuděláte, uživatele s ním "neotravujete". Ve funkci.done() si pořeště konkrétní elementy.
Poděkovali: Ernst
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
29. říj 2015 17:41 #124232
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
díky, vyzkouším to, ale musím zjistit jak. když bych tam provizorně dal reload stane se něco?
jakou odpověď posílá zpět server? dá se to někde zadat? Dá se poslat proměnná?
jakou odpověď posílá zpět server? dá se to někde zadat? Dá se poslat proměnná?
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
29. říj 2015 17:42 - 29. říj 2015 17:42 #124233
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
zase nebyla vidět moje odpověď, tak snad bude vidět teď.
ano teď je vidět, někde je na portálu chyba
ano teď je vidět, někde je na portálu chyba
- Cony
-
- Pryč
- Moderátor
-
Méně
Více
- Příspěvky: 5174
29. říj 2015 21:52 #124234
od Cony
Odpověď od Cony v tématu Kde mám chybu?
Když tam dáte reload, nebude mít AJAX vůbec žádný smysl, to už si ten formulář můžete odeslat klasicky.
A server Vám pošle takovou odpověď, jakou mu řeknete že má poslat. V tom Vašem PHP.
A server Vám pošle takovou odpověď, jakou mu řeknete že má poslat. V tom Vašem PHP.
Poděkovali: Ernst
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
29. říj 2015 23:30 - 29. říj 2015 23:34 #124236
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
díky
mám hříšnou myšlenku a nevím zda proveditelnou.
nejde hned na začátku ajaxem zavolat php, které mi vrátí určité hodnoty nutné pro předvyplnění formuláře a pak celý formulář řešit ve funkci done?
a ať přemýšlím, jak přemýšlím, reload tam asi budu muset dát, protože na základě toho formuláře se změní spousta zobrazení na stránkách a neumím to jinak ošetřit
mám hříšnou myšlenku a nevím zda proveditelnou.
nejde hned na začátku ajaxem zavolat php, které mi vrátí určité hodnoty nutné pro předvyplnění formuláře a pak celý formulář řešit ve funkci done?
a ať přemýšlím, jak přemýšlím, reload tam asi budu muset dát, protože na základě toho formuláře se změní spousta zobrazení na stránkách a neumím to jinak ošetřit
- Cony
-
- Pryč
- Moderátor
-
Méně
Více
- Příspěvky: 5174
30. říj 2015 11:03 #124239
od Cony
Odpověď od Cony v tématu Kde mám chybu?
No šlo by to, proč ne, ale zas budete mít jeden požadavek na server navíc. Takto se obvykle nahrávají jen prvky, jejichž zpracování je časově náročné, tak aby nebrzdili vykreslení stránky.
- Ernst
- Autor
- OFFLINE
- Joomla Expert
-
Méně
Více
- Příspěvky: 2380
30. říj 2015 14:29 #124246
od Ernst
Odpověď od Ernst v tématu Kde mám chybu?
Díky moc.
Nakopnete mně, jak zadat v php, co má JS poslat nebo alespoŇ KDE TO HLEDAT?
Nakopnete mně, jak zadat v php, co má JS poslat nebo alespoŇ KDE TO HLEDAT?
Vygenerováno za 0.138 sekund