Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Zasięg zmiennych w JS
Forum PHP.pl > Forum > Przedszkole
Star
Cześć

Może ktoś wytłumaczyć jak wygląda zasięg zmiennych utworzonych po zakończeniu połączenia ajaxowego?

Mamy taki kod :

  1.  
  2. $.ajax({
  3. url: "test.php",
  4. method: "POST",
  5. dataType: "json"
  6. }).done(function(json) {
  7. var text = json.text;
  8. });
  9.  
  10.  
  11. alert(text);


Dlaczego konsola wyświetla, że zmienna text jest niezdefiniowana?
LowiczakPL
bo jest zadeklarowana lokalnie

  1. var text = '';
  2. $.ajax({
  3. url: "test.php",
  4. method: "POST",
  5. dataType: "json"
  6. }).done(function(json, text) {
  7. text = json.text;
  8. });
  9.  
  10.  
  11. alert(text);
Star
deklarowalem wczesniej zmienna text, Twoj przyklad niczego nie zmienil, dalej wyrzuca mi pustego alerta

"obszedlem" to tak:
  1. var AjaxGet = function () {
  2. var result =
  3. $.ajax({
  4. type: "POST",
  5. url: 'test.php',
  6. contentType: "application/json; charset=utf-8",
  7. dataType: "json",
  8. async: false
  9. }) .responseText ;
  10. return result;
  11. }


no i dziala, jednak chcialbym sie dowiedziec dlaczego nie lapie mi zmiennej z pierwszego postu
trueblue
Zmiennej nie łapie, bo jest zadeklarowana lokalnie.
Przykład, który podał LowiczakPL jest poprawny, tyle, że alert wykona się przed funkcją done, więc zmienna będzie pusta.
Comandeer
Polecam najpierw poczytać sobie o asynchroniczności: http://webroad.pl/javascript/746-synchroni...synchronicznosc

Jak ogarniesz koncept asynchroniczności, wówczas zrozumiesz dlaczego przypisywanie wartości zwrotnej z Ajaksa do zmiennej jest po prostu bezsensowne wink.gif
Star
Dobry artykuł, dzięki :-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.