Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [javascript][jquery] Zasięg zmiennych w kilku zagnieżdżonych funkcjach? :/
Forum PHP.pl > Forum > Po stronie przeglądarki
kukix
Witam.
Mam problem z wydostaniem pewnej zmiennej.

  1.  
  2. var decyzja;
  3. $.post("ajax_work.php",{action:"check", email: "ddd@sss.pl" }, function(data) {
  4. var odp=data.split('{ajax}'); //wyciagamy wartosc
  5.  
  6. if (odp[1] == 'nie_istnieje') { decyzja = 'ok'; } else { decyzja = 'nie'; }
  7. });
  8.  
  9.  
  10. if (decyzja == 'ok') { return true; } else { return false; } //tutaj zmianna decyzja nie dociera, ma wartośc undefined :/
  11.  


Problemem jest to, że zmienna "decyzja" nei wydostaje sięze środka kodu. Próbowałem na wszystkei sposoby i nic. Prosze o podpowiedź co z tym zrobić.
com
spróbuj bez var przy decyzja, wtedy będzie globalna wink.gif
kamil4u
Cytat
spróbuj bez var przy decyzja, wtedy będzie globlana wink.gif

Że co? Sprawdź informacje, które podajesz.

[edit]To trochę szeroki temat- jak chcesz opiszę go pokrótce [/edit]
@kukix: przygotuj demo . Sprawdź czy w ogóle wchodzisz w zdarzenie sucess przy post. Umieść więcej kodu.
com
dobra nie zwróciłem uwagi że jest poza funkcja czyli jest globalna ale przy globalu nie musisz podawać var tongue.gif
kamil4u
Cytat
ale przy globalu nie musisz podawać var

Tak naprawdę musisz. Ale, że jak wiadomo HTML, CSS, JS itd. są idiotoodporne* to JS traktuje zmienną bez var jako globalną. Według dokumentacji jest to wymagane, a inna konstrukcja jest nieprawidłowa.

*Nie chcę nikogo obrazić. Tak po prostu jest. Broń Boże nie jest to skierowane do Ciebie. Jak masz jakieś doświadczenie to pewnie sam to doskonale wiesz.
kukix
Cytat(kamil4u @ 26.05.2013, 22:52:39 ) *
Że co? Sprawdź informacje, które podajesz.

[edit]To trochę szeroki temat- jak chcesz opiszę go pokrótce [/edit]
@kukix: przygotuj demo . Sprawdź czy w ogóle wchodzisz w zdarzenie sucess przy post. Umieść więcej kodu.


Poprawni wywołuje sięakcja jedna i druga,. wstawiałem tam alert pokazuje się to co trzeba. Problem tylko w tym, że dane nie przechodzą dalej.

Oto wiekszy kawałek kodu, cąła funkcja:


Kod
//ajax_work.php zwraca albo "nie_istnieje" albo pusty ciąg.


function sprawdz_email_czy_istnieje(value) {

      $.post("ajax_work.php",{action:"check_email", email: value }, function(data) {

        if (data == 'nie_istnieje') { var decyzja = 'ok'; } else { var decyzja = 'nie'; }
      });      


    if (decyzja == 'ok') { return true; } else { return false; }

}


PRÓBOWAŁEM TEŻ TAK:


Kod
//ajax_work.php zwraca albo "nie_istnieje" albo pusty ciąg.


function sprawdz_email_czy_istnieje(value) {

      $.post("ajax_work.php",{action:"check_email", email: value }, function(data) {

        if (data == 'nie_istnieje') { return true; } else { return false; }
      });      


}


Ale to również nie dziąła jak trzeba.

kamil4u
Inny kod pokazujesz w pierwszym poście inny w drugim...


Kod
//ajax_work.php zwraca albo "nie_istnieje" albo pusty ciąg.


function sprawdz_email_czy_istnieje(value) {

      $.post("ajax_work.php",{action:"check_email", email: value }, function(data) {

        if (data == 'nie_istnieje') { var decyzja = 'ok'; } else { var decyzja = 'nie'; }
      });      


    if (decyzja == 'ok') { return true; } else { return false; }

}


-->

Kod
//ajax_work.php zwraca albo "nie_istnieje" albo pusty ciąg.


function sprawdz_email_czy_istnieje(value) {
       var decyzja;
      $.post("ajax_work.php",{action:"check_email", email: value }, function(data) {

        if (data == 'nie_istnieje') { decyzja = 'ok'; } else { decyzja = 'nie'; }
      });      


    if (decyzja == 'ok') { return true; } else { return false; }

}


Polecam operować na liczbach całkowitych, bądź wartościach logicznych, a nie na stringach( tekstach ) - przy przekazywaniu jakiś informacji
com
mam wrażenie że próbujesz uzyskać coś co już zostało napisane http://api.jquery.com/jQuery.post/ wink.gif

.done()
.fail()

o to chyba chodziło wink.gif

a co do tego var przed globalem to właśnie na odwrót aż zajrzałem do specyfikacji:
Cytat
Użycie var poza funkcją jest opcjonalne; przypisanie wartości do niezadeklarowanej zmiennej domyślnie deklaruje ją jako zmienna globalną.

Chociaż zalecają użycie tam również z jednego względu, żeby się nie pogubić wink.gif
kamil4u
@com:
Masz rację - przepraszam. A byłem pewien, że jak kilka lat temu patrzyłem to było inaczej... może sklerozę już mam smile.gif

Różnica mimo wszystko jest: https://developer.mozilla.org/en-US/docs/Ja.../Statements/var - niewielka, ale zawsze


--edit--
Ciekawostka: https://developer.mozilla.org/en-US/docs/Ja.../Statements/let - nigdy o tym nie słyszałem
com
no wiesz to wszytko zależy z jakiego źródła korzystamy, ale z tego by wynikało że tak jest od wersji 1.0 biggrin.gif ale czasem rożne źródła rożnie piszą nie zawsze zgodnie z prawdą... przyznam się, że tez pierwszy raz słyszę o let, ale to wprowadzili dopiero w wersji 1,7 a aż tak bardzo nie śledziłem tych dokonań biggrin.gif
kukix
Cytat(com @ 26.05.2013, 23:43:52 ) *
mam wrażenie że próbujesz uzyskać coś co już zostało napisane http://api.jquery.com/jQuery.post/ wink.gif

.done()
.fail()

o to chyba chodziło wink.gif

a co do tego var przed globalem to właśnie na odwrót aż zajrzałem do specyfikacji:

Chociaż zalecają użycie tam również z jednego względu, żeby się nie pogubić wink.gif


tego niebardzo mogę zastosowac, ponieważ skrypt zawsze wykonuje się poprawnie.
kamil4u
A czemu nie ustosunkowałeś się do mojego kodu / postu?
kukix
ZROBIONE biggrin.gif


Kod
function sprawdz_email_czy_istnieje(value, opcja_rejestracji_value) {

  var data = $.ajax({
      type: 'POST',  
      url: 'ajax_work.php',
      data: {action:"check_email", email: value },
      async: false
     }).responseText;

  var odp=data.split('{ajax}');

  if (odp[1] == 'nie_istnieje') { return true; } else { return false; }

}
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.