Wpis z mikrobloga

Kurde przy najprostszych rzeczach napotykam błedy nad którymi siedzę godzinami. ;_;

Pomóżcie mirki, dlaczego tak się dzieje.

$.get('liczba.php', function(data){
alert(data);
});

Daje prawidłowy alert z liczbą.

var content;
$.get('liczba.php', function(data){
content = parseInt(data);
});
alert("zmienna content ma wartość: " + content);

Daje alert "undefined", doszedłem do tego, że instrukcja wewnątrz funkcji nie przypisuje zmiennej content wartości. Jak zadeklaruję u góry zmienną content=100, to daje alert zmienna content ma wartość: 100;

Why?
#jquery #javascript
  • 17
@roknasilowni: W momencie wywołania alerta jeszcze nie przyszedł response z requesta, więc się nie ustawiła wartość zmiennej content.
Wrzuć alerta zaraz za przypisaniem wartosci do content i zobaczysz roznicę :)

@roknasilowni: to "dużo niżej" i tak prawdopodobnie wykona się szybciej niż zapytanie po dane z pliku, więc nadal nie będziesz miał tej wartości. Po pobraniu wywołaj funkcję, której przekażesz pobraną informację. Tylko wtedy możesz zakładać, że na pewno będzie już ją miał.
@roknasilowni: Ponieważ ta funkcja, którą przekazujesz do get to jest callback, który będzie wykonany dopiero gdy żądanie GET zwróci dane. A z kolei samo żądanie jest asynchroniczne, czyli do końca nie wiadomo kiedy dokładnie ten callback będzie wykonany.
Przed alert zrób sleep/wait na sekundę czy dwie to callback zdąży się wykonać i wyskoczy ci alert jakiego się spodziewasz.
@Edhendil: ale to się nie nadaje nawet do takiego sprawdzenia. Wystarczy, że będzie większe opóźnienie na łączu, serwer przymuli lub cokolwiek innego i wstrzymanie skończy się zanim dostaniesz odpowiedź. I jaki będzie wniosek? Na pewno błędny ;)
Już lepiej od razu zrobić prawidłowo i korzystać z callbacków.