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)