Vyřešeno Kde mám chybu?
26. říj 2015 00:03 - 26. říj 2015 00:06 #124160
Odpověď od Ernst
Joomla Expert
ale i když to udělám takhle, tak mi ten ajax nezavolá to php.
chyba musí být ještě někde jinde?
zjednodušený výpis
chyba musí být ještě někde jinde?
zjednodušený výpis
Code:
<div id="results"></div>
<form name="form">
<input type="checkbox" name="form2" /> <span style="color: #999999;">Skryj moje umístění na mapě</span><br><br>
<button onclick="form()"><img src="../images/tl_refresh_a.png" /button>
</form>
<script>
function form({
var pr2 = document.form.form2.value
jQuery(function(){
Query.ajax({
url: '/components/com_lovefactory/models/lmenu.php',
data: {d2: pr2}
}).done(function(data){
jQuery('#results').html(data);
}).fail(function(){
jQuery('#results').html('AJAX selhal');
});
}, function(error){
jQuery('#results').html(error.message);
});
</script>
26. říj 2015 00:47 #124161
Odpověď od Cony

Moderátor
V místě volání žádná proměnná form2 neexistuje. Nepleťte si název input prvku s JavaScriptovou proměnou, nemá to spolu co dělat. Takže:
- ano, form 2 by muselo být nejprve deklarováno jako var form2.
- ano hodnotu do proměnné form2 musíte nejprve naplnit (používáte checkboxy, uvědomte si rozdíl mezi hodnotu a stavem checkboxu zaškrtnuto / nezaškrtnuto)
- chyba musí být TAKÉ někde jinde, co třeba středníky na konci řádek?
Máte ale jednoúčelovou funkci (alespoň to tak vypadá), tak proč to neřešit až přímo ve funkci (do té si poslat jen formulář - this.form). A nejlépe pomocí jQuery, když už ho používáte
- ano, form 2 by muselo být nejprve deklarováno jako var form2.
- ano hodnotu do proměnné form2 musíte nejprve naplnit (používáte checkboxy, uvědomte si rozdíl mezi hodnotu a stavem checkboxu zaškrtnuto / nezaškrtnuto)
- chyba musí být TAKÉ někde jinde, co třeba středníky na konci řádek?
Máte ale jednoúčelovou funkci (alespoň to tak vypadá), tak proč to neřešit až přímo ve funkci (do té si poslat jen formulář - this.form). A nejlépe pomocí jQuery, když už ho používáte
Code:
jQuery(form).find('[name=form2]') ...
26. říj 2015 01:05 #124162
Odpověď od Ernst
Joomla Expert
trošku se ztrácím, budu to muset nechat na ráno.
příkaz
var pr2 = document.form.form2.value nenaplní proměnnou pr2 hodnotou toho checkboxu?
to přeci také řeším až v té funkci
co vlastně přesně dělá jQuery(form).find('[name=form2]') ... , Vrátí výsledek toho pole?
středníky na konci stránek přebývají nebo chybí
konzole mi vypíše tohle:
Uncaught TypeError: form is not a functiononclick @ (index):177
Navigated to http://localhost/index.php/cs/?
Jaký je rozdíl mezi hodnotou a stavem checboxu? nebylo by nakonec jednodušší použít select ano/ne?
někde jsem možná četl že formulář odesílá hodnotu, jen když je checbox zaškrtnut?
příkaz
var pr2 = document.form.form2.value nenaplní proměnnou pr2 hodnotou toho checkboxu?
to přeci také řeším až v té funkci
co vlastně přesně dělá jQuery(form).find('[name=form2]') ... , Vrátí výsledek toho pole?
středníky na konci stránek přebývají nebo chybí
konzole mi vypíše tohle:
Uncaught TypeError: form is not a functiononclick @ (index):177
Navigated to http://localhost/index.php/cs/?
Jaký je rozdíl mezi hodnotou a stavem checboxu? nebylo by nakonec jednodušší použít select ano/ne?
někde jsem možná četl že formulář odesílá hodnotu, jen když je checbox zaškrtnut?
26. říj 2015 01:53 - 26. říj 2015 01:54 #124163
Odpověď od Cony

Moderátor
Hodnotou ano, ale to neznamená zaškrtnuto / nezaškrtnuto.ernst napsal: var pr2 = document.form.form2.value nenaplní proměnnou pr2 hodnotou toho checkboxu?
vyhledá ve formuláři prvek s jménem form2 za tři tečky si doplňte co potřebujete s tím prvkem dělat (zjistit checked, zjistit hodnotu).ernst napsal: co vlastně přesně dělá jQuery(form).find('[name=form2]') ... , Vrátí výsledek toho pole?
Ne na konci stránek, ale na koci řádků v javaskriptuernst napsal: středníky na konci stránek přebývají nebo chybí
Ano, ale vy neodesíláte formulář, ale zpracováváte ho v javaskriptu. Odesílaná data si tedy musíte pořešit sám.ernst napsal: někde jsem možná četl že formulář odesílá hodnotu, jen když je checbox zaškrtnut?
26. říj 2015 18:42 #124185
Odpověď od Ernst
Joomla Expert
díky, to mám zase chvíli, co studovat.
Jak jsem psal dříve, doufal jsem, že javascript se nebudu muset učit
Jde pomocí img zavolat php a tam si vše včetně javascriptu pořešit?
např.
var img = new Image();
img.src = "skript.php?a=1";
Jak jsem psal dříve, doufal jsem, že javascript se nebudu muset učit
Jde pomocí img zavolat php a tam si vše včetně javascriptu pořešit?
např.
var img = new Image();
img.src = "skript.php?a=1";
26. říj 2015 18:47 #124186
Odpověď od Houbák
Zkušený uživatel
Prakticky na jakýkoliv prvek můžete dát onclick událost a zavolat přes AJAX php soubor...
26. říj 2015 19:06 #124187
Odpověď od Ernst
Joomla Expert
právě to studuji
to php z formuláře mohu volat např.
nebo co jsem použil já
ale proč se mi proboha nezavolá to php (mám na jeho začátku dán zápis do logu)
koukám na to a nemohu to vykoukat.
asi prvně zkusím místo checbox dát třeba select nebo text.
tam to snad bude srozumitelnější
nebo to zkusit napsat nějat takhle?
ale mně se ten ajax líbí nejvíc
to php z formuláře mohu volat např.
Code:
<form name="form">
<input type="text" name="form2">
<input type="text" name="form3">
<a href="javascript:form();">OK</a>
</form>
Code:
<form action="send.php" method="GET">
<input type="text" name="prom1" />
<input type="text" name="prom2" />
<input type="submit" />
</form>
nebo co jsem použil já
Code:
<button onclick="form()"><img src="../images/tl_refresh_a.png" /button>
ale proč se mi proboha nezavolá to php (mám na jeho začátku dán zápis do logu)
koukám na to a nemohu to vykoukat.
asi prvně zkusím místo checbox dát třeba select nebo text.
tam to snad bude srozumitelnější
nebo to zkusit napsat nějat takhle?
Code:
<form action="form-1.php" method="post">
Jméno: <input type="text" name="jmeno">
věk: <input type="text" name="vek">
<input type="submit" value="odeslat">
</form>
<?
$jmeno = $_POST['jmeno'];
$vek = $_POST['vek'];
?>
<p><? echo "$jmeno"; ?> je pěkné jméno i když je ti <? echo "$vek"; ?> let...</p>
ale mně se ten ajax líbí nejvíc
27. říj 2015 20:31 #124198
Odpověď od Ernst
Joomla Expert
tak jsem to zkusil jiným způsobem
JS:
pak php
tak se mi to do toho php předá ok, mohu si to tam zapsat do databáze atd.
ale zůstane mi to na té volané stránce ) prázdná stránka ale já se potřebuji vrátit na tu původní stránku, ta ale může být pokaždé jiná
JS:
Code:
<form method="GET" action='/components/com_lovefactory/models/lmenutest.php' >
<input type="checkbox" name="form2" /> <span style="color: #999999;">Skryj moje umístění na mapě</span><br>
<input type="checkbox" name="form3"/> <span style="color: #999999;">Změň svoji pozici na mapě</span><br>
<input type="submit"><img src="../images/tl_refresh_a.png">
Code:
<?php
define( '_JEXEC', 1 );
if (!isset($_GET["form2"])) {$f2="off";} else {$f2=$_GET["form2"];} ;
var_dump($f2) ;
if (!isset($_GET["form3"])) {$f3="off";} else {$f3=$_GET["form3"];} ;
var_dump($f3) ;
tak se mi to do toho php předá ok, mohu si to tam zapsat do databáze atd.
ale zůstane mi to na té volané stránce ) prázdná stránka ale já se potřebuji vrátit na tu původní stránku, ta ale může být pokaždé jiná
27. říj 2015 20:44 #124199
Odpověď od Ernst
Joomla Expert
to jsem alespoň částečně vyřešil
stačí za to php dát
ale ta prodleva bílé stránky je na můj vkus dost dlouhá.
opravdu bych to rád vyřešil tím ajaxem, ale to by mně tady někdo musel trochu nakopnout, protože javascript se učím teprve třetí den
stačí za to php dát
Code:
<script>
javascript: history.go(-1)
</script>
ale ta prodleva bílé stránky je na můj vkus dost dlouhá.
opravdu bych to rád vyřešil tím ajaxem, ale to by mně tady někdo musel trochu nakopnout, protože javascript se učím teprve třetí den
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ě
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.
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.
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
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
28. říj 2015 14:53 #124216
Odpověď od Cony

Moderátor
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>
28. říj 2015 22:45 - 28. říj 2015 22:56 #124223
Odpověď od Ernst
Joomla Expert
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
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:
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');
});
}