Do komponenty nedorazí data odeslaná pomocí naja.makeRequest

kuon
Člen | 20
+
0
-

Ahoj všichni,
prosí o radu. Mám našeptávač adres, který mi v presenteru funguje normálně, ale po přesunu do komponenty ne. V latte mám input, ze kterého odesílám vyplněný text přes naja.makeRequest a vracím pole adres. Problém je, že ať dělám, co dělám, tak mi do handle metody místo daného stringu dorazí null. Naja mi funguje a když vyšlu ajaxový požadavek přes odkaz, tak data dorazí v pořádku.

Tohle funguje:

<a n:href="stahniAdresy! 'test'" class="ajax">test</a>

Tohle ne:

<script type='text/javascript'>
naja.makeRequest('POST', {link stahniAdresy!}, {
	data: 'test'
}).then((response) => {
	if (response.vysledek) {
		console.log(response.vysledek);
	}
}).catch(error => {
	alert(error);
});
</script>
public function handleStahniAdresy($data): void
{
	$this->getPresenter()->payload->vysledek = true;
	$this->getPresenter()->sendPayload();
}

Poradil by mi prosím někdo, v čem může být problém?

Editoval kuon (19. 8. 19:54)

Marek Bartoš
Nette Blogger | 1311
+
+2
-

V jednom případě přidáváš parametr do url adresy, v tom druhém přidáváš data do request body. Parametry pro handle se z request body nečtou

kuon
Člen | 20
+
0
-

Marek Bartoš napsal(a):

V jednom případě přidáváš parametr do url adresy, v tom druhém přidáváš data do request body. Parametry pro handle se z request body nečtou

Když to posílám přes naja.makeRequest metodou GET, tak to taky nefunguje. A když přes POOST a načtu to v handle komponenty pomocí HttpRequest, tak data vidím v pořádku. Viz:

	public function handleStahniAdresy($data): void
	{
		bdump($this->getPresenter()->getHttpRequest()->getPost('data'));
		$this->pres->payload->vysledek = true;
		$this->pres->sendPayload();
	}

Mohu tedy nějak v komponentě zajistit, aby šlo pracovat rovnou s proměnou definovanou v inicializaci funkce ($data) stejně jako to funguje v presenteru? Tam mi totiž naprosto stejné volání naja.makeRequest bez problému načte poslaná data do dané proměnné aniž bych si to musel dohledávat v getHttpRequest().

Editoval kuon (19. 8. 22:30)

nightfish
Člen | 527
+
0
-

@kuon Podívej se, pod jakým názvem proměnné Nette hodnotu do komponenty posílá. Určitě to nebude data. Spíš něco jako nazevKomponenty-data (případně něco delšího, pokud je komponenta zanořená hlouběji). Pokud tedy chceš, aby se data do handle metody v komponentě z Naja requestu dostala, musíš jejich název sestavovat stejně, jako to dělá Nette.

kuon
Člen | 20
+
0
-

@nightfish Díky za navedení. Takže správné řešení je název proměnné v JS komponenty načítat takto: {$control->getParameterId(‚data‘)}

Čili celý funkční požadavek:

<script type='text/javascript'>
naja.makeRequest('POST', {link stahniAdresy!}, {
	{$control->getParameterId('data')}: 'test'
}).then((response) => {
	if (response.vysledek) {
		console.log(response.vysledek);
	}
}).catch(error => {
	alert(error);
});
</script>

Editoval kuon (20. 8. 13:52)