Paraméter átadás – Ajax és OnComplete

, ,

prototypeAz Ajax.Updater prototype objektum használatakor előbb-utóbb beleütközünk abba a problémába, hogy szeretnénk használni az OnComplete tulajdonságot. Ez még nem olyan baj, de ha szeretnénk neki paramétereket is átadni akkor meglepetések fognak érni.


Ha az Ajax.Updater-t használjuk akkor valami ilyesmi lesz a kódunk:

new Ajax.Updater(
   $('ajaxinfodiv'),
   'ajaxlekerdezo.php',
   {
      method:'get',
      onComplete:leKerdezesKesz
   });

Ez azt fogja csinálni, hogy amikor az AJAX kommunikáció az onComplete szakaszba ér, akkor meghívja és végrehajtja a leKerdezesKesz() függvényt.

A probléma

A dolog akkor kezd érdekessé válni, amikor a leKerdezesKesz() függvénynek szeretnénk átadni egy (vagy több) paramétert.

new Ajax.Updater(
   $('ajaxinfodiv'),
   'ajaxlekerdezo.php',
   {
      method:'get',
      onComplete:leKerdezesKesz('góranga','harihari')
   });

Sajnálatos módon azt fogjuk tapasztalni, hogy az onComplete-hez kapcsolt leKerdezesKesz() függvényünk nem akkor hívódik meg amikor az Ajax.Updater befejezi a futását, és feltölti a válaszként érkezett adatokkal az ajaxinfodiv id-jű html elemünket, hanem ez előtt. Namásmost, ha történetesen a leKerdezesKesz() történetesen pont ezzel a html elemmel akar dolgozni (pl átszínezi, villogtatja, vagy bármi), akkor nem a várt eredményt adja, mivel a html elemünk a meghívás pillanatában üres lesz, vagy ha van onLoading tulajdonságunk, akkor az azzal definiált tartalom lesz benne.

A megoldás

A megoldás egyszerű, a prototype onComplete kezelésének mögöttes és szövevényes megoldásából adódik :) Ha az onComplete tulajdonságnak egy anonim függvényt adunk meg, akkor az már ténylegesen akkor fog lefutni amikor azt akartuk.

new Ajax.Updater(
   $('ajaxinfodiv'),
   'ajaxlekerdezo.php',
   {
      method:'get',
      onComplete:function(){
         leKerdezesKesz('góranga','harihari');
         }
   });
Share
Mi az az RSS és mi az a PayPal?

Ez a bejegyzés rrd billentyűzetéből potyogott ki 2007 április 28. napján 04:56:51-kor. Eddig 2,268 olvasást ért meg. A visszajelzéseket nyomonkövetheted ezzel az RSS feed-el. Véleményt nyilváníthatsz, vagy trackbackolhatsz a saját oldaladon.

Ugrás fel

JólMegMondjad!

1 vélemény

  1. Balogh László
    2010 szeptember 17. 19:15:35

    Köszönet a leírásért ! :)
    Hasznos volt számomra.
    Üdv. Laci

Switch to our mobile site