Nefunkční překreslení snippetu
- adam_frajer
- Člen | 14
Zdravím, mám problém s překreslenímm textu pomocí ajaxu.
Přílklad funguje na principu, že pokud zaškrtnu checkbox, měl by se mi
ajaxem přepsat text vedle checkboxu na curremt/pending
<div id="content">
{snippet xx}
{var $label = "current"}
{if $result == "2"}
{var $label = 'pending'}
{/if}
{dump $label}
{$label}
<label name="label" class="">
<input type="checkbox" id="label" name="label" class="form-check-input ajax" value="#" > Test
</label>
{/snippet}
</div>
<script n:syntax="double">
const labelCheckbox = document.getElementById('label');
let url = new URL({{plink //this }});
labelCheckbox.addEventListener('change', function() {
url.searchParams.append("do", 'label');
fetch(url)
.then(console.log("hotovo!"))
.catch(error => {
console.log('Error: ' + error);
});
});
</script>
handle vypadá nějak takto
public function handleLabel(){
$section = $this->getSession('session1');
if($section->get("result") == "1"){
$section->set("result", "2");
}
else{
$section->set("result", "1");
}
$this->redrawControl('xx');
}
Jinak v @layout.latte si ještě načítam naja.js pomocí CDN takto:
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/naja@1.8.3/dist/Naja.js"></script>
<script src="https://cdn.jsdelivr.net/npm/naja@2.5.0/dist/Naja.min.js"></script>
<script> document.addEventListener('DOMContentLoaded', () => naja.initialize()); </script>
Problém je, že když checkbox zaškrtnu, tak {dump $label}
mi
label vypíše jak má, ale samotný {$label}
jako text zůstává
stejný a nijak se nepřekreslí.
Poradíte prosím někdo, jak překreslit text ve snippetu?
- mskocik
- Člen | 61
Nativny fetch
ti nespracuje snippety automaticky. Cize bud si
napis vlastny handler, alebo pouzi naja.makeRequest()
Samozrejme za predpokladu, ze na dany request dostavas spravnu odpoved –
JSON so snippets
property.
- adam_frajer
- Člen | 14
mskocik napsal(a):
Nativny
fetch
ti nespracuje snippety automaticky. Cize bud si napis vlastny handler, alebo pouzi naja.makeRequest()Samozrejme za predpokladu, ze na dany request dostavas spravnu odpoved – JSON so
snippets
property.
Děkuji moc, pomohlo :-). Javascript jsem přepsal takto a funguje:
naja.makeRequest('POST', url, null, null);
- adam_frajer
- Člen | 14
mskocik napsal(a):
Nativny
fetch
ti nespracuje snippety automaticky. Cize bud si napis vlastny handler, alebo pouzi naja.makeRequest()Samozrejme za predpokladu, ze na dany request dostavas spravnu odpoved – JSON so
snippets
property.
Ještě mám jeden dotaz. Jakmile se mi požadavek odešle, v url se mi objeví &do=label tudíž když stránku refreshnu, POST se mi odešle znovu a to je dost nepraktické. Je nějaká možnost jak zaslat POST bez toho, že by se mi pak objevil v URL?
Editoval adam_frajer (15. 1. 14:07)
- jiri.pudil
- Nette Blogger | 1029
Ahoj, stačí pro Naju poslat nápovědu ze serveru, viz https://naja.js.org/#…
A ještě to asi budeš chtít zkombinovat s replace módem (https://naja.js.org/#…), aby Naja nahradila stávající záznam v historii místo přidání nového. Jinak by se uživatel mohl navigací zpět v browseru dostat do stavu před odesláním formuláře.
- adam_frajer
- Člen | 14
jiri.pudil napsal(a):
Ahoj, stačí pro Naju poslat nápovědu ze serveru, viz https://naja.js.org/#…
A ještě to asi budeš chtít zkombinovat s replace módem (https://naja.js.org/#…), aby Naja nahradila stávající záznam v historii místo přidání nového. Jinak by se uživatel mohl navigací zpět v browseru dostat do stavu před odesláním formuláře.
Díky moc! Přesně to jsem hledal.
stačilo jen
přidat naja.makeRequest('POST', url, null, { history: 'replace' });
a
$this->payload->postGet = TRUE;
$this->payload->url = $this->link('this');