po ajaxovem volani redrawControl nevykona javascript
- blueticket
- Člen | 41
Zdravim vas,
nevite mi nekdo poradit? Mam definovan snippet (zkousel jsem uz vsechno definoval jsem ho v control-u nebo v layoutu ktery control inicializuje), ktery potrebuji ajaxove prekreslit po akci ProcessOrder v komponente. Pri debugu se novy obsah snippetu prenese spravne z presenteru a nachazi se v response. Nevykona se mi vsak nize uvedeny javascript a nezobrazi mi alert. Nevite proc? Nemam v kodu zadny Javascript error ani nic podobneho.
latte kod:
{snippet notifyAlert}
{if $flashes}
<script type="text/javascript">
{foreach $flashes as $flash}
alert({$flash->message});
{/foreach}
</script>
{/if}
{/snippet}
Kod z komponenty (zkousel jsem i variant $this->flashMessage a $this->redrawControl):
public function handleProcessOrder($cart_nr) {
$cart_nr = $this->getPresenter()->getHttpRequest()->getQuery('cart_nr');
$this->database->query("UPDATE sma_document_items_tmp SET displayed=1 WHERE cart_nr=? AND displayed=0", $cart_nr);
$this->presenter->flashMessage($this->presenter->translate("Objednávka odoslaná"));
$this->presenter->redrawControl("notifyAlert");
}
Odpoved, kterou dostanu z chrome Network debuggeru:
{"snippets":{"snippet--notifyAlert":"<script type=\"text/javascript\">\n alert(\"Objednávka odoslaná\");\n </script>\n"}}
Editoval blueticket (15. 3. 2018 9:34)
- Ondřej Kubíček
- Člen | 494
tak to je jasné, ten js se nespustí, nevím jak řešíš ajax, ale obecně bys to měl mít nějak takhle, poslat si tu message v payloadu a pak v successu spustit alert
$.ajax({
success: function(payload){
if (payload.message != null){
alert(payload.message);
}
}
});
- blueticket
- Člen | 41
Jo to jsme delal prvne. Pouzivam nette.ajax ale v tomhle se mi zas nevykona success cast :(. Nevim, jestli je dulezite, ze volani probiha z komponenty. V handleru komponenty pak pouzivam pro naplneni payload-u tohle:
$this->presenter->payload->message = $this->presenter->translate("Objednávka odoslaná");
$this->presenter->sendPayload();
$('body').delegate('#order_btn', 'click', function () {
$.nette.ajax({
type: 'GET',
dataType: 'jsonp',
url: {link processOrder!}, //"{!$print_address}",
data: {
cart_nr: {$cart_nr}
},
success: function (payload) {
alert(payload.message);
}
});
//window.location.href = "{!$print_address}";
});
- blueticket
- Člen | 41
takze super. Ondrej diky, mel jsem tam chybu (i kdyz v celku netusim proc) a namisto dataType: ‚jsonp‘ jsem dal dataType: ‚json‘ a pak se vse rozbehlo tak jak melo.