Problém s ajaxem, poprvé vše v pořádku, podruhé nefunguje

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
honzaliska
Člen | 6
+
0
-

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("&amp;","&"));
			}
		}

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

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

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

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