Nittro – odoslanie formulára cez Ajax, vypíše error

Thomass112
Člen | 7
+
0
-

Dobrý deň,

viete mi prosím poradiť ohľadom odoslania formulára cez Ajax používajúc knižnicu Nittro.
Po odoslaní formulára, vypíše sa error:
There was an error processing your request. Please try again later., snippet neprepíše a
po refresh stránky je Post úspešne pridaný.

latte:

<div class="modal-body">
                {form newsForm}
                    <div class="text-center text-center">
                        <div class="form-group">
                            <input type="text" id="titlePost" n:name=heading class="form-control" placeholder="Nadpis" autofocus>
                        </div>
                        <div class="form-group">
                            <textarea n:name=text id="textPost" class="form-control" placeholder="Popis..."></textarea>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <input type="submit" id="saveNews" name=send class="ajax btn btn-primary">
                        <button id="zrusit-btn-modal" type="button" class="btn btn-secondary" data-dismiss="modal">Zrušiť</button>
                    </div>
                {/form}
             </div>

JS

<script>
$('#addNewsForm').on('submit', function() {
     var title = $('#titlePost').val();
     var text = $('#textPost').val();
     $.getJSON(
       {link NewsFormSucceeded!},
		{
			title: $('#titlePost').val(),
			text: $('#textPost').val()
		})
    $('#modalNews').modal('hide');
});
</script>

Presenter:

<?php
	protected function createComponentNewsForm() {
        $form = new Form;
        $form->getElementPrototype()->id = 'addNewsForm';
        $form->getElementPrototype()->class('ajax');
        $form->addtext('heading');
        $form->addTextArea('text');

        return $form;
    }

    public function handleNewsFormSucceeded($title, $text): void {
        $this->database->table('t_dat_post')->insert([
            'userID' => $this->getUser()->getID(),
            'title' => $title,
            'text' => $text
        ]);

        $this->template->posts= $this->database->table('t_dat_post')->where('deleted', null)->order('created DESC');
        $this->flashMessage('Príspevok bol úspešne zverejnený', 'success');
        $this->redrawControl('posts');

    }
?>

Ďakujem za rady.

MajklNajt
Člen | 494
+
0
-

Preštuduj poriadne dokumentáciu, ako fungujú formuláre, toto je celé zle..

Keď ti to bude fungovať bez ajaxu, až potom sa pustí do jeho implementácie.

Thomass112
Člen | 7
+
-1
-

MajklNajt napsal(a):

Preštuduj poriadne dokumentáciu, ako fungujú formuláre, toto je celé zle..

Keď ti to bude fungovať bez ajaxu, až potom sa pustí do jeho implementácie.

Formulár funguje v poriadku bez Ajaxu. Z príkladu vyššie sú vyňaté niektoré riadky kódu, pretože som skúšal rôzne kombinácie, ako odoslať formulár cez Ajax a tento zápis sa zatiaľ tomu priblížil najviac. Pôvodne som to mal ošetrené cez redirect s kotvou, tak to malo aspoň sčasti nádych Ajaxového spracovania požiadavky.

Ako uvádzam, formulár sa odošle, ale vypíše sa error There was an error processing your request. Please try again later. a až po refreshe stránky je príspevok úspešne zverejnený.

MajklNajt
Člen | 494
+
-2
-

snippety sa ti pravdepodobne neprekreslujú preto, lebo to posielaš cez $.getJSON – čiže Nittro obchádzaš, preto som ti radil, začni postupne od základov – ale keď si nedáš poradiť už v začiatkoch, nečakaj radu pri komplexnejšom probléme…

chemix
Nette Core | 1310
+
+3
-

@Thomass112 Nittro nepotrebuje jquery. Nitrro nepotrebuje v zakladu nic, nez nastavit data-ajax nebo class=ajax zalezi jak si to nastavis. A zbytek se deje “sam” mrkni do repozitare planette/nettecamp je tam registracni form

Thomass112
Člen | 7
+
0
-

@chemix ďakujem pekne, funguje to parádnee ! Bola to nakoniec len malá drobnosť. :) Ako prevažne ;)

@MajklNajt ďakujem za výchovné odporúčania ohľadom štúdia. Dokumentáciu pre formuláre mám naštudovanú spredu a zozadu, a ako som písal, neAjaxové posielanie a spracovanie fungovalo v poriadku, a opäť sa opakujem – v mojom príklade sú vyňaté riadky kódu, príklad reprezentuje najbližšie „funkčné“ správanie cez Ajaxové spracovanie formulára – som si vedomý, že nie je podľa nette dokumentácie :)

Editoval Thomass112 (21. 1. 2020 19:29)

Thomass112
Člen | 7
+
-1
-

@chemix vieš mi prosím poradiť pri nasledovnom.
Je jednoduchý formulár, ktorý sa má odosielať ne-ajaxovo:
Presenter:

<?php
	protected function createComponentPostForm() {
        $form = new Form;
        $form->addtext('heading')
                ->setRequired("Vložte nadpis príspevku");
        $form->addTextArea('text')
                ->setRequired("Vložte popis príspevku");
        $form->addsubmit('send', 'Zverejniť');

        $form->onSuccess[] = [$this, 'PostFormSucceeded'];
        return $form;
    }

	public function PostFormSucceeded(Form $form, \stdClass $values) {
        $this->flashMessage('Príspevok bol úspešne zverejnený', 'success');
    }
?>

Latte:

{form postForm}
    <label for="titlePost">Nadpis</label>
    <input type="text" n:name=heading placeholder="Nadpis">

    <label for="textPost">Popis</label>
    <textarea n:name=text id="textPost"  placeholder="Popis..."></textarea>

    <input type="submit" data-ajax="false" n:name=send>
{/form}

Pri každom odoslaní formulára: „There was an error processing your request. Please try again later“
Nemám už tušenie kde, čo mám vložiť, nevložiť.

Ďakujem za radu.

Editoval Thomass112 (31. 5. 2020 20:36)

Mysteria
Člen | 797
+
+1
-

Pro začátek bych začal tím, že si zapneš vývojový režim, abys viděl skutečnou chybu, protože z obecné pětistovky nepoznáš nic.
Nebo se můžeš podívat do složky log, kde to bude taky zalogované a podle toho můžeme pokračovat dál. :)

Thomass112
Člen | 7
+
0
-

Ďakujem za tip. Neviem, čo mám konkrétne hľadať. V logoch, v aplikácii nič nie je, je prázdny. V prehliadači v DevTools → Console log uvádza len Warning: „DevTools failed to load SourceMap: Could not load content for chrome-extension://gighmmpiobklfepjocnamgkkbiglidom/include.preload.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME
Alebo to isté len s „include.popstload.js.map“.

Možno zaujímavejšie je v DevTools → Network → „http://localhost/vw/www/?_tracy_bar=content-ajax.5fd72ad45d1&XDEBUG_SESSION_STOP=1&v=0.5173534605459533“.

V Debbuger Bar sa pod záznamom „TRACY“ zobrazí záznam „AJAX“, žiaden error nevidím.
Jediný error je po odoslaní formulára – vypísanie hlášky „There was an error processing your request. Please try again later“. :)

Ďakujem.

Mysteria
Člen | 797
+
0
-

OK, vývojový režim tedy máš. :) V tom případě je divné, že se ti nezobrazí celá chyba. Je to vůbec chyba od Nette? Není to od webového serveru? Jestli to nepoznáš, tak udělej screen té chybové hlášky a pošli ho sem.

Thomass112
Člen | 7
+
0
-

Nech sa páči, tu je screenshot „https://img.techpowerup.org/200604/errorlog.png“ :)
Prípadne odporúčate použiť inú knižnicu pre AJAX ? Alebo iný server ? Toto je spustené na lokáli cez xampp.
Pretože tento Nittro framework mi robí problémy v troch projektoch.

Ďakujem.

Mysteria
Člen | 797
+
0
-

Já osobně mám Nittro FW na dvou projektech a funguje bez problémů. Každopádně ještě si otevři v prohlížeči Developer Tools a záložku Network. Odešli ten formulář a bude tam vidět ten AJAXový request, tak ho rozklikni a podívej se do odpovědi, jestli ta chyba nebude vidět tam.

Pokud ani tak nic nezjistíš, tak asi by bylo vhodný ten projekt někam nahrát, třeba někdo bude ochotnej si ho stáhnout a podívat se ti u sebe, v čem tam máš chybu.

Thomass112
Člen | 7
+
0
-

Mysteria napsal(a):

Já osobně mám Nittro FW na dvou projektech a funguje bez problémů. Každopádně ještě si otevři v prohlížeči Developer Tools a záložku Network. Odešli ten formulář a bude tam vidět ten AJAXový request, tak ho rozklikni a podívej se do odpovědi, jestli ta chyba nebude vidět tam.

Pokud ani tak nic nezjistíš, tak asi by bylo vhodný ten projekt někam nahrát, třeba někdo bude ochotnej si ho stáhnout a podívat se ti u sebe, v čem tam máš chybu.

Ďakujem za ochotu a čas. :)

denny
Člen | 3
+
0
-

@Thomass112 Pokud jsi to ještě nevyřešil, mohlo by to být tím, že pokud chceš vypisovat flashMessage (kdekoli) musíš potom přesměrovat, tedy v případě nittro lepší redrawControl(‚název_snippetu‘), nebo redrawDefault()