Javascript függvényen kívüli változó elérés
2018-10-11T16:49:46+02:00
2018-10-11T19:04:39+02:00
2022-08-11T07:05:40+02:00
pdavid
Sziasztok,
Adott az alábbi kód, ami azt kellene csinálja, hogy a szervertől kérdez egyet, majd a kapott választ eltárolja a InteriorTemp nevű stringbe. A kód lekérdező fele működik, egyedül az a baj, hogy nem teszi át a függvényen kívüli stringbe a kapott adatokat. 
Ez a kód:

var InteriorTemp; $.ajax({ url : "http://10.0.4.130:801/TestData", success : function(result){ InteriorTemp=result; } }); alert(InteriorTemp);
Szerintetek hogyan írjam, hogy jó legyen?
A választ előre is köszönöm!
Ui.: Ez a kód egy házautomatizálás része, ez kellene a szervertől lekérdezze az időjárás adatokat, majd azt megjelenítse egy JS grafikonon. A szerver rész és a grafikon rész működik, egyedül már csak ez a rész van hátra.
Mutasd a teljes hozzászólást!
Köszönöm szépen mindenkinek a segítségét!
Sikerült megoldanom, az SO-n találtam azt, hogy async:false, -t kell beírni és egyből jó lett.
A lokális result azért nem jó, mert azután van kb. 400 sornyi grafikus megjelenítés, 8 string van, amit felkell dolgozni (IntTemp, OutTemp, Humidity, Pressure, Light, WindDir, WindSpeed, stb.).
További szép estét mindenkinek!
Mutasd a teljes hozzászólást!

  • var InteriorTemp; $.ajax({ url : "http://10.0.4.130:801/TestData", success : function(result){ InteriorTemp=result; alert(InteriorTemp); } }); // alert(InteriorTemp);
    Amit csinálni szeretnél, tedd be a függvénybe. Így működik az aszinkron programozás, merthogy ez az: elküldi az ajax hívást és rögtön fut tovább. A success-es callback majd jóval később fut csak le.
    Mutasd a teljes hozzászólást!
  • Köszönöm a választ!
    Az alert-et csak próbának tettem be, a gond az, hogy nem alert-tel fogom majd kiíratni, hanem beszeretném tenni a InteriorTemp változóba a szervertől kapott értéket.
    Ha így csinálom, akkor undefined-et ír ki az alert.

    var InteriorTemp; $.ajax({ url : "http://10.0.4.130:801/TestData", success : function(result){ InteriorTemp=result; //alert(InteriorTemp); } }); alert(InteriorTemp);
    Mutasd a teljes hozzászólást!
  • Szia! Szerintem féleértetted a választ: nincs garancia arra, hogy mikor fut le a success blokk (biztosan lassabban, mint a rögtön utána következő alert), ezért ha abban kapott értékkel szeretnél dolgozni, mindenképp abba kell beleraknod az azt használó függvényeket.
    Mutasd a teljes hozzászólást!
  • Ahogy Rudolf is írja: bármit, amit az InteriorTemp-pel tenni szeretnél, a success-függvényből kell indítanod. Igazából így az InteriorTemp változóra nem is biztos, hogy szükség van, csak ha valamiért el akarod tenni az eredményt hosszabb távon. Hiszen lokálisan ott a result.
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen mindenkinek a segítségét!
    Sikerült megoldanom, az SO-n találtam azt, hogy async:false, -t kell beírni és egyből jó lett.
    A lokális result azért nem jó, mert azután van kb. 400 sornyi grafikus megjelenítés, 8 string van, amit felkell dolgozni (IntTemp, OutTemp, Humidity, Pressure, Light, WindDir, WindSpeed, stb.).
    További szép estét mindenkinek!
    Mutasd a teljes hozzászólást!
abcd