Vyřešeno Kde mám chybu?
02. lis 2015 21:46 #124294
Odpověď od Ernst
Joomla Expert
tak jsem to začal zkoušet a moje podezření, že budu potřebovat pomoc se potvrdilo
kód mám:
volání testvlevo.php mi do .done vrátí ty výchozí hodnoty.
Ale funkci zobrazform nemohu napsat takto
ani takto
.
Jak to mám udělat?
kód mám:
Code:
<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
Code:
<form name="fm1">
<input type="text" name="form4" value = data >
<a href="javascript:formuloz(fm1);"><img src="../images/tl_refresh_a.png" ></a>
</form>
Code:
</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?
02. lis 2015 21:46 - 02. lis 2015 21:51 #124295
Odpověď od Ernst
Joomla Expert
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>
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>
02. lis 2015 22:09 #124296
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ů!
Odpověď od Cony

Moderátor
Zase motáte hrušky a jabka. Ne že formulář nemůže být uvnitř script, ale nemůžete motat HTML a JavaScript.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>
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
02. lis 2015 23:01 #124298
Odpověď od Ernst
Joomla Expert
díky, ale takhle to asi nebude?
to mi do konsole vypíše Uncaught SyntaxError: Unexpected token <
Dnes už mi to nemyslí, zkusím ráno
Code:
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();
}
Dnes už mi to nemyslí, zkusím ráno
03. lis 2015 01:11 #124299
Odpověď od Cony

Moderátor
Předposlední řádek chybí apostrofy. Ale tohle je asi ten nejmíň šikovnej způsob z těch co jsem psal.
03. lis 2015 10:54 - 03. lis 2015 10:57 #124302
Odpověď od Ernst
Joomla Expert
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ší.
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í
Code:
<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>
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í
03. lis 2015 15:29 #124312
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...
Odpověď od Cony

Moderátor
Protože voláte document.open(); a document.close();ernst napsal: Nějak nevím, proč to tak je a nic mně zatím nenapadá.
Dokážete mi s tím poradit?
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...
03. lis 2015 16:04 - 03. lis 2015 16:08 #124315
Odpověď od Ernst
Joomla Expert
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?
.
jdu studovat ty další možnosti, zatím o nich nemám potuchy.
Nemáte pro urychlení nějaký příklad?
.
03. lis 2015 22:29 - 03. lis 2015 22:31 #124323
Odpověď od Ernst
Joomla Expert
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ší?
Š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ší?
04. lis 2015 00:11 #124325
Odpověď od Cony

Moderátor
Podle mně by Vám měl pro nahrání fomruláře plně vyhovovat .load()
04. lis 2015 11:32 - 04. lis 2015 11:34 #124330
Odpověď od Ernst
Joomla Expert
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ář
Funkce testajax proběhne a jak zavolá funkci zbrazform tak v consoli napíše:
To znamená, že to .load nemůže být ve funkci zobrazform?
Ale kde tedy?
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ář
Code:
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:
Code:
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?
04. lis 2015 11:55 #124331
Odpověď od Ernst
Joomla Expert
když dám do modulu jen ten příklad
tak se mi taky nic nezobrazí
Code:
<script type="text/javascript">
$("#sem_nacteme").load("/components/com_lovefactory/models/testvlevo.html", function() {
alert('Načteno');
});
$("#sem_nacteme").load("/components/com_lovefactory/models/testvlevo.js",
function(response, status, xhr) {
// status - v případě, že nastane chyba, bude mít hodnotu "error"
// xhr - informace o chybě
if(status == "error")
// když nastala chyba
{
alert("Nastala chyba číslo: "+xhr.status+" - "+xhr.statusText);
// xhr.status - číslo chyby
// xhr.statusText - textový popis chyby, třeba error
// Not Found - nenalezeno, Acces denied - přístup odepřen apod.
} else {
alert('Načteno');}
});
</script>
04. lis 2015 12:07 #124332
Odpověď od Ernst
Joomla Expert
i tenhle příklad
mi v consoli napíše Uncaught TypeError: Cannot read property 'click' of null a nereaguje na ten click
Code:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("#div1").load("/components/com_lovefactory/models/demo_test.txt", function(responseTxt, statusTxt, xhr){
if(statusTxt == "success")
alert("External content loaded successfully!");
if(statusTxt == "error")
alert("Error: " + xhr.status + ": " + xhr.statusText);
});
});
});
</script>
</head>
<body>
<div id="div1"><h2>Let jQuery AJAX Change This Text</h2></div>
<button>Get External Content</button>
</body>
</html>
04. lis 2015 13:00 #124334
Odpověď od Ernst
Joomla Expert
když se to pokouším řešit přímo v testvlevo.php a v něm si načtu
tak se taky formulář neobjeví, což je vlastně logické
Code:
$document = &JFactory::getDocument();
$document->addScript('/components/com_lovefactory/models/testvlevo.js');