CJ největší affiliate síť v ČR, 40+ inzerentů CPC,CPL,CPO model. Začni vydělávat teď
Zobrazují se odpovědi 1 až 7 z 7

JQuery/AJAX - callback funkce

  1. Zdravím, nedávno jsem tu našel odpovědi na mou otázku jQuery/AJAX, tak to zkusím ještě jednou.

    Nevytvářím žádný složitý script, spíše si s tím jen tak ve volném čase hraji a narazil jsem na drobný zádrhel. Mám jednoduchý formulář, který je vygenerovaný ajaxem pro uložení defaultních hodnot, což není ani tak podstatné.
    jQuery/AJAX:
    Kód:
    $("#form_ajax_def").submit(function(){ 
    	$.ajax({  
    		type: "POST", 
    		url: 'ajax_def.php', 
    		data: {...},
    		complete: function(data){  		 		
    			$("#ajax_def_currency").html(data.responseText);
    		}  
    	}); 
    	return false;
    });
    Skript funguje dobře, vybrané hodnoty uloží do DB, dále je v selectech nastaví jako výchozí a zobrazí upravený formulář. Při druhém odeslání už ale AJAX neproběhně, proto jsem domníval, že když jednoduše dva stejné ajaxy do sebe vnořím tak bude problém vyřešen. Problém byl sice vyřešen ale jen pro druhé odeslání formuláře, u třetího odeslání opět nefunguje.
    Kód:
    $("#form_ajax_def").submit(function(){ 
    	$.ajax({  
    		type: "POST", 
    		url: 'ajax_def.php', 
    		data: {...},
    		complete: function(data){  		 		
    			$("#ajax_def_currency").html(data.responseText);
    			$("#form_ajax_def").submit(function(){ 
    				$.ajax({ ... }); 
    				return false;
    			});
    		}  
    	}); 
    	return false;
    });
    Jakým působem se řeší toto vícenásobné spuštění ajaxu po opětovném odeslání formuláře, který je vygenrován tím samým ajaxem?
    Děkuji,
    P.

  2. Happy Robot :]

    Co se právě děje na Webtrhu?

  3. nechapu, to musi jit porad jestli nekde ten event neodlinkovavas, bezne to pouzivam a samozrejme to funguje i pri druhem, tretim nebo treba stopadestaem odeslani...

  4. Funkci pro zpracování události submit jsi měl navěšenou na původní formulář, který(jestli to správně chápu) po odeslání přepisuješ novým, na který už ale žádný handler navěšený není. To se dá řešit pomocí delegování - události můžeš díky tzv. probublávání událostí odchytávat v některém z prvků, které jsou formuláři nadřazené(třeba v body):

    Kód:
    $('body').on('submit', '#form_ajax_def', function() {
        ...
    });

  5. Aleš Jiříček: nevím, prostě mi tato verze nefunguje, ale nevadí, už to mám... :)
    800XE:
    Tak jsem si s tím ještě malinko hrál a přesto, že se mi tvůj návrh nepovedlo rozběhat - nevím proč - jsem problém vyřešil.
    Použil jsem metodu live() a vůbec jsem nemusel další ajax vnořit. Myslíš, že je toto dobré řešení nebo by s tím mohl být ve specifických situacích nějaký problém?
    Kód:
    $("#form_ajax_def").live('submit', function(){
    	$.ajax({  
    		type: "POST", 
    		url: 'ajax_def.php', 
    		data: {...},
    		complete: function(data){  		 		
    			$("#ajax_def_currency").html(data.responseText);
    		}  
    	}); 
    	return false;
    });

  6. Tak jsem si s tím ještě malinko hrál a přesto, že se mi tvůj návrh nepovedlo rozběhat - nevím proč - jsem problém vyřešil.
    Použil jsi v podstatě to samé řešení, co jsem navrhoval já :-) Akorát pro starou verzi jQuery, proto jsi taky mojí variantu nerozběhal - ta ti pojede od verze 1.7 ;-).

    Myslíš, že je toto dobré řešení nebo by s tím mohl být ve specifických situacích nějaký problém?
    Jediný problém s live nastává, když se nabinduje velké množství prvků, pak to může mít celkem znatelný dopad na výkon. To ale není tenhle případ.

  7. Krátká odpověď: live() bylo do JQuery zabudováno přesně pro tento případ. Tj. alaxová odpověď vrací novou část html kódu, která se vloží do (nebo přepíše část) původní stránky.

    Pravdou je, že sami autoři už její použití nedoporučují (možná časová náročnost, nemožnost řetězení volání funkcí, ...) a místo toho se nabízí delegování: http://jupiterjs.com/news/why-you-sh...se-jquery-live

    EDIT: 800XE byl rychlejší :-)

  8. Tak vám děkuji za vysvětlení.
    A jdu ještě ozkoušet novější verzi jQeury.
    Mejte se radostně a báječně!

Podobná témata

  1. jQuery funkce
    By Taps in forum Javascript
    Odpovědí: 6
    Poslední příspěvek: 28.07.2011, 22:44
  2. jquery ajax ie
    By andre01 in forum Javascript
    Odpovědí: 1
    Poslední příspěvek: 14.03.2011, 20:08
  3. jQuery a jeho funkce
    By KUba_ in forum Javascript
    Odpovědí: 9
    Poslední příspěvek: 22.09.2010, 00:11
  4. Funkce v jQuery
    By radvis in forum Javascript
    Odpovědí: 29
    Poslední příspěvek: 31.01.2010, 12:26
Hostujeme u Server powered by TELE3