Hirdetés

Új hozzászólás Aktív témák

  • Jim-Y
    veterán

    Sziasztok!

    Remélem jó helyen járok AJAX kérdéssel.
    Az egész napom ráment ma egy program részletre, és csak nem sikerült működésre bírni.

    Gyorsan összefoglalom miről van szó:

    Adott egy javascript amiben van egy AJAX blokk. Az AJAX blokk elindul de közben a JS fut tovább a főszálon, pedig használnia kellene az AJAX-nál visszakapott paraméter értékeket.

    Ezt úgy próbáltam megoldani hogy létrehoztam egy ajaxvege = true változót a JS elején. Mielőtt elindulna az AJAX rész, ennek az értékét false-ra állítom, majd az AJAX végén visszállítom ezt az értéket true-ra. Az AJAX blokk után a főprogramban pedig meghívok egy ciklust, aminek az lenne a dolga hogy addig sleepeltesse a JS-t, amíg az ajaxvege = false.

    Úgy gondoltam hogy ez így teljesen működőképes, de kiíratva az ajaxvege változó értékét, az folyamatosan false értéket mutat és végteleníti a ciklust (holott maga az AJAX rész csak kb egy mp-ig fut alap esetben).

    Olyan mintha a JS nem venne tudomást arról hogy az AJAX közben módosítja a változó értékét.
    Úgy is próbáltam hogy csak simán módosítottam a változó értékét miután meglett a többi paraméter értéke, úgy is próbáltam hogy a paraméterek mellett callback-el visszaadtam a hívó félnek az ajaxvege változót is, de nem működik egyszerűen.

    Van valakinek ötlete mi lehet a gond?

    Köszönöm!

    A javascript esemenyvezerelt aszinkron programnyelv a te esetedben az aszinkronitason van a hangsuly. Ha ezzel a fogalommal most talalakozol eloszor akkor keress ra a neten biztos jo leirasok vannak rola. Roviden tomoren az ajax hivas megszolitja a backendet, kuld egy requestet amire majd valamikor a jovoben jon egy valasz. Na most az talan erzodik, hogy a majd valamikor a jovoben az nem egy tul kezzel foghato valami, nagyon sok mindentol fugg, hogy mikor jon meg a valasz igy a lenyeg, hogy addig nem szabad feltartani a program futasat (nem szabad blokkolni). Ezt javascriptben (is) promiszokkal oldjak meg (promise). Ha ez a fogalom is ismeretlen szamodra akkor keress ra a neten -> (A+ promise). A jquery-nek (gondolom jquery-t hasznalsz ajax implementaciokent) is van egy sajat implementacioja a promisokra ezt hivjuk deferred-nek. Na a jQ ajax metodusai ilyen deferreddel ternek vissza

    pszeudokod:

    var yourVariable;
    var dfd = jquery.ajax(options);
    dfd.then(
    function goodCase(returnVal) {
    yourVariable = returnVal;
    // do smtg with yourVariable here
    },
    function errorCase(err) {
    if (err) {
    console.error(err):
    }
    }
    );

Új hozzászólás Aktív témák