po ajaxovem volani redrawControl nevykona javascript

blueticket
Člen | 41
+
0
-

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
+
+1
-

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
+
0
-

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
+
0
-

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.