Nittro – odoslanie formulára cez Ajax, vypíše error
- Thomass112
- Člen | 7
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.
- Thomass112
- Člen | 7
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ý.
- Thomass112
- Člen | 7
@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
@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)
- Thomass112
- Člen | 7
Ď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.
- Thomass112
- Člen | 7
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
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
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. :)