• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[JS] Zasięg obiektu

VPS Starter Arubacloud
0 głosów
161 wizyt
pytanie zadane 30 grudnia 2018 w JavaScript przez niezalogowany

Obiekt zadeklarowany globalny jest widoczny tylko w bloku w którym przypisuje. W konsoli Firefoxa jest dostęp do obiektu. Co zmienić żeby był dostępny globalnie?

var pytania;
function pobierz_pytania() {
  console.log("Funkcja pobierz_pytania");
  $.getJSON("pytania.json", function(pyt) {
    pytania = pyt["pytania"];
    console.log(pytania); //obiekt istnieje
  });
  console.log(pytania); //obiekt nie istnieje
}

 

komentarz 30 grudnia 2018 przez kenjiro244 Dyskutant (8,600 p.)
A zmiana podczas deklaracji var na let?
komentarz 30 grudnia 2018 przez niezalogowany

taki sam efekt. Funkcja wykonuje się w dziwnej kolejności.

function pobierz_pytania() {
  console.log("Funkcja pobierz_pytania");
  $.getJSON("pytania.json", function(pyt) {
    pytania = pyt["pytania"];
    console.log(new Date()); // drugi komunikat
  });
  console.log(new Date()); // pierwszy komunikat
}

 

1 odpowiedź

0 głosów
odpowiedź 30 grudnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
wybrane 30 grudnia 2018
 
Najlepsza
a czy metoda getJSON nie jest czasem asynchroniczna? Jeśli tak, to jest to przeciez zachowanie całkowicie normalne :)
komentarz 30 grudnia 2018 przez niezalogowany

Działający kod:

function pobierz_pytania() {
  console.log("Funkcja pobierz_pytania");
  $.ajax({
    async: false,
    url: "pytania.json",
    success: function(pyt) {
      pytania = pyt["pytania"];
    }
  });
}

Dostaje w konsoli komunikat:

Użycie synchronicznej wersji metody XMLHttpRequest w głównym wątku jest przestarzałe z powodu szkodliwych efektów ubocznych. Więcej informacji można znaleźć na stronie http://xhr.spec.whatwg.org

Można to zrobić asynchronicznie? Czy nie przejmować się ostrzeżeniem?

komentarz 30 grudnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
ale dlaczego tak usilnie chcesz robić synchronicznie? Async to właśnie całe piękno JS :)

po prostu w zwrotce callback na success przypisz sobie te dane do pola pytania i wtedy dopiero np. wypełnij DOM czy cokolwiek, co pozwoli na dalszą pracę. Async jest dobry, ponieważ nie blokuje usera na czas wczytywania tego pliku, może więc on sobie spokojnie czekać, czytając w tym czasie coś innego na stronie itp. itd.

A jak boli Cię forma zapisu to poczytaj o async/await, jesli dobrze pamiętam do jQuery zwracał Promise więc await się powinno nadać, ale tego pewny nie jestem bo z jQuery już wieki nie pracowałem.

Podobne pytania

0 głosów
1 odpowiedź 567 wizyt
pytanie zadane 20 czerwca 2019 w JavaScript przez 42savage Bywalec (2,630 p.)
+1 głos
1 odpowiedź 125 wizyt
pytanie zadane 20 sierpnia 2023 w Sieci komputerowe, internet przez Tharek Nowicjusz (130 p.)
0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 17 kwietnia 2022 w Sieci komputerowe, internet przez Pakiś Nowicjusz (120 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...