Zpracování payload v javascriptu

- svagi
 - Člen | 15
 
Zdravím, mám takový primitivní dotaz, který hledám už několik dní a nenašel jsem něco, z čeho by to úplně jasné, jak se zpracovává odpověď v javascriptu.
Například:
odesílám payload
if ($this->isAjax()) {
	$this->payload->foo = $foo;
        $this->sendPayload();
}
používám doplňky Ajax s jQuery a Ajaxové formuláře pro ajaxové zpracování následovně:
            $("form.ajax :submit").live("click", function () {
                $(this).ajaxSubmit();
                //něco
                return false;
            });
Jak zde zpracuji paylod, který si posílám z presenteru? Díky za odpovědi.

- Bernard Williams
 - Člen | 207
 
Nazdárek,
dá se použít něco ve smyslu:
$this->payload->text = 'Ahoj světe';
$this->sendPayload();
var request = $.ajax({
	url: {plink udelejNeco!},
	type: "POST",
	data: { id : 666 }
});
request.done(function(msg) {
	alert(msg.text);
});
Konečných řešení je samozřejmě víc.
Bernard

- Ascaria
 - Člen | 187
 
Já použil https://componette.org/search/?… a pak něco jako
<script>
        $('a.ajax, a.datagrid-ajax').live('click', function(event){
            if(!event.isDefaultPrevented()){
                // Zobrazíme spinner
                $("#ajax-spinner, #ajax-spinner-bg").fadeIn('fast');//.show();
                // Načteme ajaxově stránku
                $.get(this.href);
                // Zamezíme původnímu eventu
                event.preventDefault();
                return false;
            }
        });
</script>
Jo a konec jsem doplnil o
<script>
// ...
		error: function (payload) {
            // Oznámíme chybu
            alert('AJAX Error\n\n' + payload.status + ' ' + payload.statusText);
            // Schováme spinner a jeho pozadí
            $("#ajax-spinner, #ajax-spinner-bg").hide();
		}
	}
});
jQuery.ajaxSetup({
	success: jQuery.nette.success,
	error: jQuery.nette.error,
	dataType: "json"
});
</script>
					Editoval Ascaria (30. 3. 2012 12:19)

- Ascaria
 - Člen | 187
 
S tím jsem se potýkal dlouho, nakonec jsem to vyřešil ne moc elegantně takto:
<script>
        /* Confirmová tlačítka */
        $('a').die('click');
        $('a').live('click', function(event){
            // Pokud chce odkaz confirm a uživatel zruší akci, zrušíme akci
            if($(this).data('confirm') != undefined && !confirm($(this).data('confirm'))){
                // Zamezíme původnímu eventu
                event.preventDefault();
                return false;
            }
            // Pokud chce odkaz druhý confirm a uživatel zruší akci, zrušíme akci
            if($(this).data('confirm2') != undefined && !confirm($(this).data('confirm2'))){
                // Zamezíme původnímu eventu
                event.preventDefault();
                return false;
            }
            return true;
        });
        /* Ajaxová tlačítka */
        $('a.ajax, a.datagrid-ajax').die('click');
        $('a.ajax, a.datagrid-ajax').live('click', function(event){
            if(!event.isDefaultPrevented()){
                // Zobrazíme spinner
                $("#ajax-spinner, #ajax-spinner-bg").fadeIn('fast');//.show();
                // Načteme ajaxově stránku
                $.get(this.href);
                // Zamezíme původnímu eventu
                event.preventDefault();
                return false;
            }
        });
</script>
tzn eventy nejdřív zabiju a pak nastavím znovu (tím zamezím tomu, že se na tlačítko navěsí další a další a dalsí ten samý event). tu kontrolu isdefaultprevented tam mam z toho duvodu, ze potvrzovaci dialogy resim jinde, z kódu je patrno že předem. a jelikož pak má odkaz 2 eventy (confirm a ajax req, tak confirmem preventnu default (tím samozřejmě taky automaticky zamezím vykonání hrefu, ale nikoli dalšího eventu) a v ajax eventu kontroluju jestli je to prevently a pak ajax nevykonam).
Toto řešení má tu výhodu, že pak stačí dát jakémukoli odkazu „data-confirm“ a třeba = „data-confirm2“ a nemusím řešit javascript confirmu:
<a href="link nekam" data-confirm2="Opravdu chcete smazat žádost "15"?" data-confirm="Smazat žádost "15"?" class="datagrid-ajax" title="popisek tlacitka">obrazek tlacitka</span></a>
přičemž text otázky konfirmu mám samozřejmě v tom data-* attributu
Editoval Ascaria (30. 3. 2012 13:07)

- svagi
 - Člen | 15
 
Paráda, to se může hodit. Použít primitivního die mě zrovna nenapadlo, přitom to tak v JS řeším velmi často i na jiných místech, ale v mém případě to naprosto dostačuje, jednoduše tím zamezím dalšímu navěšování eventů, přesně jak si psal. Díky moc! :-)
Editoval svagi (30. 3. 2012 13:18)