Nefunkční překreslení snippetu

adam_frajer
Člen | 14
+
0
-

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 | 53
+
+3
-

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
+
0
-

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
+
0
-

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 | 1028
+
+3
-

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
+
0
-

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