Problém s ajaxem, poprvé vše v pořádku, podruhé nefunguje
- honzaliska
- Člen | 6
Ahoj, mám zvláštní problém s ajaxem. Poprvé proběhne v pořádku, ale při druhém volání se neprovede požadavek ajaxem, ale klasicky. Kde by mohla být chyba?
presenter
public function handleEdit($event_id, $type)
{
$this->edit = true;
$event = $this->context->events->getEvent($event_id, $type);
$this['eventForm']->setDefaults(array(
'name' => $event['name'],
'lector' => $event['lector'],
'department' => $event['department_id'],
'class' => $event['class_id'],
));
if($this->isAjax()) {
$this->template->show_form = TRUE;
$this->template->sidebar_title = 'Editovat událost';
$this->payload->event_type = $type;
$this->invalidateControl('sidebar_title');
$this->invalidateControl('sidebar_form');
}
}
link který akci volá vytvářím v template
<script>
var events = new Array();
{foreach $events as $event}
events[{$iterator->getCounter()}] = new Array();
events[{$iterator->getCounter()}]['class'] = {$event['class']};
events[{$iterator->getCounter()}]['start'] = {$event['start']};
events[{$iterator->getCounter()}]['link'] = '<a href={link edit! "event_id" => $event['ID'], "type" => $event['type']} class="ajax">';
{/foreach}
</script>
Následně ho přesunu na místo
<script>
function spreadEvents()
{
$('.event').remove();
for(index = 1; index < events.length; ++index) {
$('tr.' + events[index]['class'] + ' td.' + events[index]['start']).html(events[index]['link'].replace("&","&"));
}
}
Co se týká ajaxu, kód vypadá takto
$.nette.init(function(ajaxHandler) {
$("form.ajax").on("submit",ajaxHandler);
$("a.ajax").on("click", ajaxHandler);
});
$.nette.ext({
success: function (payload) {
spreadEvents();
goToPosition(parseInt($('#slider').val()));
newEvent();
switch(payload.todo) {
case 'openSidebar':
openSidebar();
break;
case 'closeSidebar':
setTimeout(closeSidebar, 500);
break;
}
}
});
Díky za každou radu :-)
- petr.jirous
- Člen | 128
místo
$("form.ajax").on("submit",ajaxHandler);
$("a.ajax").on("click", ajaxHandler);
zkus použít toto:
$(document).on("submit", "form.ajax", ajaxHandler);
// a to same pro to druhe :)
- honzaliska
- Člen | 6
Tak bohužel ani toto mi nefunguje. Nevím proč, ale takto už nefunguje ajax vůbec. Říkám si spíš jestli nebude problém s tím, jak ten link vytvářím nebo jak s ním manipuluju…
- Oli
- Člen | 1215
Zkus invalidovat všechny části se kterýma pracuješ. Možná to tak děláš už teď a jen jsem to přehlídl. Jde o to, že když něco překreslíš ajaxem, tak to vlastně zahodí stávající kus šablony a místo něho tam vloží nově načtenou část. Takže pokud invaliduješ jen například tlačítko, ale obsluhu tlačítka ne, tak se ztratí „propojení“ těch dvou částí a udělá to ten efekt, že to poprvé funguje pak nefunguje pak funguje, …
Možná ti pomůže i tohle vlákno