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?

27. říj 2015 22:53 - 27. říj 2015 22:55 #124208
Odpověď od Cony
Moderátor
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ě
  1. 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)
  2. 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
  3. 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.

27. říj 2015 23:25 #124212
Odpověď od Ernst
Joomla Expert
díky prostuduji si to
stejně jsem se chtěl k ajaxu vrátit.

28. říj 2015 12:55 - 28. říj 2015 12:57 #124215
Odpověď od Ernst
Joomla Expert
pustil jsem se do toho znovu od počátku abych to mohl udělat ajaxem
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

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'); }); }

Powered by Fórum