Do komponenty nedorazí data odeslaná pomocí naja.makeRequest
- kuon
- Člen | 20
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
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
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
@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
@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)