Přihlásit se

Joomla 5.1.0 a Joomla 4.4.4 (17 dub 2024)

Dnes byla uvolněna nová verze Joomla 5.1.0, společně s Joomla 4.4.4. Tato verze přináší spoustu nových funkcí, vylepšení v oblasti bezpečnosti a kódu a díky těmto vylepšením i vyšší rychlost.

Vyřešeno Kde mám chybu?

28. říj 2015 14:53 #124216
Odpověď od Cony
Moderátor
Protože žádnou proměnou form nemáte definovanou. Použijte třeba
Code:
function formajax(form) {

a
Code:
<a href="javascript:formajax(this.form);">OK</a>

28. říj 2015 22:45 - 28. říj 2015 22:56 #124223
Odpověď od Ernst
Joomla Expert
tak jsem to dal v ajaxu:
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

29. říj 2015 14:13 #124227
Odpověď od Cony
Moderátor
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:
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'); }); }

29. říj 2015 15:54 - 29. říj 2015 16:02 #124229
Odpověď od Ernst
Joomla Expert
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?

29. říj 2015 16:26 - 29. říj 2015 16:29 #124230
Odpověď od Ernst
Joomla Expert
použil jsem Vaší rady a zjednodušil to takto:
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.

29. říj 2015 17:31 #124231
Odpověď od Cony
Moderátor

ernst napsal: Done je předpokládám, že se to úspěšně odeslalo tomu php a ne že to php proběhlo.

.done() je po získání odpovědi ze serveru, tedy po provedení PHP na serveru.

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

Powered by Fórum