Undefined przy pobieraniu JSON'a z pliku

Undefined przy pobieraniu JSON'a z pliku
Losiu22
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 98
0

Witam,
chcę pobrać dane w formacie JSON z pliku:

Kopiuj
function newTileMapFromJSON(src) {
    var mymap;
    $.getJSON(src, function(data) {
        mymap = data;
        console.log(mymap); //sprawdzam 1
    });
    console.log(mymap); //sprawdzam 2
}

newTileMapFromJSON("tilemaps/testmap.json");

No i mam problem, ponieważ przy "sprawdzam 2", "mymap" ma wartość undefined (a przy sprawdzam 1 wszystko jest dobrze)

Dziwne jest także to co widać w logach: wychodzi na to, że linijka 7 (to przy *sprawdzam 2) wykonuje się przed *sprawdzam1.

Wyjaśni mi ktoś dlaczego kod wykonuje się nie po kolei i jak temu zaradzić?

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 426
0

getJSON wywoływane jest asynchronicznie. Puszczone jest zapytanie, a reszta kodu leci sobie jak leciała. Logika która musi korzystać z danych pobranych z JSONa niech odbywa się w ciele funkcji - tzw. callback

Kopiuj
 function(data) {
        mymap = data;
        console.log(mymap); //sprawdzam 1
    }
SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 426
0
Kopiuj
function calyKod()
{
   //caly kod!
};
Kopiuj
$.getJSON(src, function(data) {
   calyKod();
});

To tak uprszaczając bardzo.
Nie wiem dokladnie jak Twoj kod ma działac ;)

Losiu22
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 98
0

@Swr tak to wygląda:

Kopiuj
function newTileMapFromJSON(src) {
    var mymap;
    $.getJSON(src, function(data) {

        [jakieś mało znaczące w tej chwili obliczenia]

        var dane = {
            map: tMap,
            tiles: blocks,
            name: MapName
        };

        return dane;
    });
}

Funkcja newTileMapFromJSON teraz nie ma prawa zwracać niczego ponieważ... no nie może :P
Więc co zrobić, żeby ta funkcja zwracała te "dane"?

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 426
0

możesz w callbacku wywoływać jakąś funkcje która przyjmuje jako argument te dane, i te dane są gdzieś ustawiane <- tak zamiast return

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.