Kde mám chybu?

Odpověď od Ernst
01. lis 2015 22:11 - 01. lis 2015 22:17 #124285
idea je taková (možná úplně zcestná)
ajaxem si zavolám php, které v databázi vyhledá požadované hodnoty a vrátí je do .done
z done zavolám funkci s těmito parametry, která vytvoří formulář (s předvyplněnými hodnotami) a ajaxem ho pošle do dalšího php, které ty hodnoty uloží do databáze.
Dnes mně málem zabili na dálnici a jen shodou náhod to odnesly jen plechy, tak se možná vyjadřuji nejasně, zítra to chci vyzkoušet a případně lépe popsat

PS tu funkci jsem do done zatím nepsal, jen uvažuji, zda to takto půjde a zítra to zkusím.
jde o to, zda formulář může být v javascriptové funkci.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
01. lis 2015 22:39 #124286
Tak hlavně že jen plechy a jste ok...

Ale k věci, to co chcete by samozřejmě šlo, proč ne, ale jak jsem již psal je to poměrně nesmysl. Logicky by to mělo být
- nahrát modul s předpřipravenými hodnotami rovnou (ne ajaxem)
- odeslání zpracovat ajaxem a v reakci na něj případně skrýt formulář, zobrazit místo něj děkujeme za odeslání nebo pod.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
01. lis 2015 23:43 #124287
s tím souhlasím, ale když už to mám hotový takhle (zatím bez přednastavených hodnot), tak to chci dotáhnout takhle.
nevím, co přesně myslíte slovy "nahrát modul", ale předpokládám, že myslíte zobrazit vlastní modul.
Tady je vše vepsáno v modulu joomly typu "vlastní obsah".
Pak se teprve chci naučit napsat vlastní modul, kde to možná bude jednodušší.
Ten formulář je tam pořád, ale hrátky s ním si mohu také vyzkoušet.
Je vidět i bez přihlášení na www.gaylocator.com
Já to dopoledne zkusím napsat, tak jak si myslím a když to nepůjde, dovolím se na to ještě doptat. Teď už se na to psychicky necítím

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
02. lis 2015 21:46 #124294
tak jsem to začal zkoušet a moje podezření, že budu potřebovat pomoc se potvrdilo
kód mám:
<script> 
testajax()
function testajax(){
 jQuery.ajax({
	  url: '/components/com_lovefactory/models/testvlevo.php',
     }).done(function(data){
    console.log(data);
    zobrazform(data);
  }).fail(function(){
    console.log('Odeslání selhalo');
  });
}
function zobrazform(data) {

}
function formuloz(){
    jQuery.ajax({
	  url: '/components/com_lovefactory/models/lmenu.php',
          data: {d1: form4}
  }).done(function(){
    console.log('Odeslano');
  }).fail(function(){
    console.log('Odeslání selhalo');
  });
}
</script>

volání testvlevo.php mi do .done vrátí ty výchozí hodnoty.
Ale funkci zobrazform nemohu napsat takto
<form name="fm1">
<input type="text" name="form4" value = data >
<a href="javascript:formuloz(fm1);"><img src="../images/tl_refresh_a.png" ></a>
</form>
ani takto
</script>
<form name="fm1">
<input type="text" name="form4" value = data >
<a href="javascript:formuloz(fm1);"><img src="../images/tl_refresh_a.png" ></a>
</form>
<script>
.

Jak to mám udělat?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
02. lis 2015 21:46 - 02. lis 2015 21:51 #124295
hledám, zda tam jde dát nějaký include, ale to nějak nechápu.
Je jasný, že pokud ten script ve funkci ukončím a zase obnovím, vypíše se nejprve ten formulář a žádnou proměnnou data nezná.
Když tam ten script nepřeruším, hlásí to chybu, protože formulář asi nemůže být v rámci <script>

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
02. lis 2015 22:09 #124296

ernst napsal: Když tam ten script nepřeruším, hlásí to chybu, protože formulář asi nemůže být v rámci <script>

Zase motáte hrušky a jabka. Ne že formulář nemůže být uvnitř script, ale nemůžete motat HTML a JavaScript.
Takže HTML v Javascriptu musíte nějak šikovně vytvořit. třeba pomocí jQuery(''), nebo pomocí jQuery.html(), nebo prostě document.write(''); nebo místo čistého AJAX použít v tomto případě funkci load , nebo si formulář vytvořit již předem v PHP a v JS doplňovat jen ty hodnoty.

A nezapomínejte na středníky na konci příkazů!
Poděkovali: Ernst

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
02. lis 2015 23:01 #124298
díky, ale takhle to asi nebude?
function zobrazform(data) {
document.open();
document.write('<form name="fm1">');
document.write('<input type="text" name="form4" value = data >');
document.write('<a href="javascript:formuloz(fm1);"><img src="../images/tl_refresh_a.png" ></a>');
document.write(</form>);
document.close();
}
to mi do konsole vypíše Uncaught SyntaxError: Unexpected token <

Dnes už mi to nemyslí, zkusím ráno

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
03. lis 2015 01:11 #124299
Předposlední řádek chybí apostrofy. Ale tohle je asi ten nejmíň šikovnej způsob z těch co jsem psal.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
03. lis 2015 10:54 - 03. lis 2015 10:57 #124302
Díky za radu. Vím, že to není zrovna elegantní a slibuji, že když tohle rozchodím, vyzkouším i ostatní zbůsoby, co jste navrhoval. Pro mně je tohle zatím ale nejsrozumitelnější.
<script type="text/javascript"> 
testajax()
function testajax(){
 jQuery.ajax({
	  url: '/components/com_lovefactory/models/testvlevo.php'
     }).done(function(data){
    console.log(data);
    zobrazform(data);
  }).fail(function(){
    console.log('Odeslání selhalo');
  });
};
function zobrazform(data) {
document.open();
document.write('<form name="formular">');
if (data=="1") {
document.write('<input type="checkbox" name="form4" checked >');
} else {
document.write('<input type="checkbox" name="form4">');}
document.write('<a href="javascript:formuloz(formular);"><img src="../images/tl_refresh_a.png" ></a>');
document.write('</form>');
document.close();
}
function formuloz(formular){
if (document.formular.form4.checked==true){var p3 = "1";} else  {var p3 = "0";};
    jQuery.ajax({
	  url: '/components/com_lovefactory/models/lmenutest.php',
          data: {d3: p3}
  }).done(function(){
    console.log('Odeslano');
    javascript: document.location.reload ();
  }).fail(function(){
    console.log('Odeslání selhalo');
  });
};
</script>
Proběhne správně testvlevo.php, které řekne, které inputy mají být zaškrtnuty, zobrazí se formulář. proběhne správně lmenutest.php, který hodnoty zapíše do databáze.
Ale má to velkou vadu. Ten formulář se zobrazí na nové stránce, takže vůbec nevidím uvodní stranu webu, ale jen ten formulář na bílé stránce a nikam jinam se nedostanu.
Nějak nevím, proč to tak je a nic mně zatím nenapadá.
Dokážete mi s tím poradit?

PS ona mi problikne úvodní stránka a pak se natáhne tenhle modul, který je už jen v nové stránce. Tento modul se zobrazuje na úvodní stránce, tekže cesty "zpět" není

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
03. lis 2015 15:29 #124312

ernst napsal: Nějak nevím, proč to tak je a nic mně zatím nenapadá.
Dokážete mi s tím poradit?

Protože voláte document.open(); a document.close();
Na document.write v tomto případě zapomeňte, v asynchroním volání by se Vám formulář vypsal bůh ví kam, použijte buď to .load(), nebo některou z metod jQUery - .html(), .append() atd...

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
03. lis 2015 16:04 - 03. lis 2015 16:08 #124315
to mně taky napadlo, ale pokud tam to document open a close nedám, zacyklí se to.
jdu studovat ty další možnosti, zatím o nich nemám potuchy.

Nemáte pro urychlení nějaký příklad?
.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
03. lis 2015 22:29 - 03. lis 2015 22:31 #124323
díky moc, ráno to vyzkouším.
Škoda, že nelze použít ten document.write, to mi přišlo srozumitelné a plně mi to vyhovovalo
Kterou z těch možností považujete pro mně nejsrozumitelnější a nejvýhodnější?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
04. lis 2015 00:11 #124325
Podle mně by Vám měl pro nahrání fomruláře plně vyhovovat .load()

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
04. lis 2015 11:32 - 04. lis 2015 11:34 #124330
tak jsem si dohledal ještě dokumentaci:
www.w3schools.com/jquery/jquery_ajax_load.asp
jquery-navod.cz/kategorie-ajax/9-ajax

ale ztrácím se v tom. Dříve jste psal "nahradit ajax funkcí .load"
To jsem ne zcela pochopil.

Zkouším do té funkce zobrazform natáhnout formulář
function zobrazform(data) {
$("#sem_nacteme").load("/components/com_lovefactory/models/testvlevo.html", function() {
    alert('Načteno');
});
}

Funkce testajax proběhne a jak zavolá funkci zbrazform tak v consoli napíše:
Uncaught TypeError: Cannot read property 'load' of nullzobrazform @ (index):162(anonymous function) @ (index):156j @ jquery.js:3148k.fireWith @ jquery.js:3260x @ jquery.js:9314b @ jquery.js:9718

To znamená, že to .load nemůže být ve funkci zobrazform?
Ale kde tedy?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.