Hirdetés

Keresés

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

  • a2d2
    addikt

    Debuggold ki, hogy miért nem kapod meg az értéket. Vagy rosszul használod az API-t, vagy valahol elhasal a program időközben. Ennyiből ezt nem lehet megmondani.

    Na sikerült végre. Eszembe jutott egy marha egyszerű ötlet és szerencsére működött.
    Ennyi volt az egész:

    JS első fele

    if koordinátákat kell számolni
    {
    function getLatLng(callback) {
    geocoder.geocode({'address': v_cim},function(results,status){
    if(status == google.maps.GeocoderStatus.OK) {
    v_koord_x = results[0].geometry.location.lat();
    v_koord_y = results[0].geometry.location.lng();
    callback(v_koord_x, v_koord_y);
    }
    });
    }
    getLatLng(function(v_koord_x, v_koord_y) {
    alert(v_koord_x);
    alert(v_koord_y);
    folytatas();
    });
    }
    else
    {
    folytatas();
    }

    function folytatas()
    {
    JS második fele
    }

  • a2d2
    addikt

    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):
    }
    }
    );

    Szia!

    Na ránéztem a tegnapi alkotásokra és ahogy nézem próbáltam már minden félével (.when, .then, async: false, ...), de nem tudtam sehogy megállítani a főprogramot. Ez egy OL3 program, benne egy google maps-es geokódolással. A JS második fele kellene hogy megkapja a kiszámított koordinátákat:

    JS első fele

    function getLatLng(callback) {
    geocoder.geocode({'address': v_cim},function(results,status){
    if(status == google.maps.GeocoderStatus.OK) {
    v_koord_x = results[0].geometry.location.lat();
    v_koord_y = results[0].geometry.location.lng();
    ajaxvege = true;
    callback(v_koord_x, v_koord_y, ajaxvege);
    }
    });
    }

    getLatLng(function(v_koord_x, v_koord_y, ajaxvege) {
    alert(v_koord_x);
    alert(v_koord_y);
    });

    JS második fele

  • a2d2
    addikt

    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):
    }
    }
    );

    Szia!

    Köszi.
    Igen, JQuery-t használok.
    Holnap tudok ránézni mert melóhelyemen van a kód :)

  • a2d2
    addikt

    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!

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

Hirdetés