po ajaxovem volani redrawControl nevykona javascript

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
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.