Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z getJSON
Forum PHP.pl > Forum > Po stronie przeglądarki
gargamel
Napisałem w jQuery funkcję która będzie sprawdzała na bieżąco czy wpisany przez użytkownika login jest wolny.
Funkcja pobiera wartość z input-a "a". Za pomocą getJSON wysyła owy login do skryptu, który sprawdza czy w bazie takowy już istnieje.
Jeśli login istnieje, w divie o id #log wyświetlana jest informacja "login wolny" (czyli odpowiedź data.logres), w przeciwnym razie mamy wiadomość że login zajęty.
I to działa bez zarzutu.. Kod wygląda następująco: (kod #1)
  1. function CheckLogin(a){
  2. var resfile = "../validation/logcheck/index.php?log="+a;
  3. $.getJSON(resfile, function(data){
  4. $("#log").html(data.logres);
  5. });
  6. }


Ale zależy mi aby sama funkcja oprócz wypisywania info na temat loginu zwracała true gdy login wolny i false gdy zajęty.
JSON zwraca w tym celu dodatkowy parametr data.ret - równy powiedzmy 0 gdy login zajęty i 1 gdy wolny.
Schody zaczynają się gdy chce uzależnić wynik funkcji od tej że zmiennej.
Próba pierwsza wyglądała tak : (kod #2)

  1. function CheckLogin(a){
  2. var resfile = "../validation/logcheck/index.php?log="+a;
  3. $.getJSON(resfile, function(data){
  4. $("#log").html(data.logres);
  5. if(data.ret=="1"){ return true; }
  6. else return false;
  7. });
  8. }


Nie zadziałało...
Podejście drugie: (kod #3)

  1. function CheckLogin(a){
  2. var resfile = "../validation/logcheck/index.php?log="+a;
  3. $.getJSON(resfile, function(data){
  4. $("#log").html(data.logres);
  5. if(data.ret=="1"){ var rr="1"; }
  6. else { var rr="0"; }
  7. });
  8. if(rr=="1"){ return true; }
  9. else return false;
  10. }


Tu też nie zadziałało, bo zmienna została zdefiniowana w getJSON i na zewnątrz nie ma do niej dostępu...
Wszystko utrudnia jeszcze fakt że przy asynchronicznym działaniu skrypt nie czeka na wykonanie $.getJSON

Mimo wszystko wydaje mi się że rozwiązanie nie jest jakoś masakrycznie trudne i kod nr 2 jest najbliżej bycia prawidłowym...
W każdym razie proszę o pomoc bo sam prędzej osiwieje ... winksmiley.jpg
gargamel
Więc sporządziłem coś takiego:
  1. function PreCheckLogin(a, callback){
  2. var resfile = "../validation/logcheck/index.php?log="a;
  3. $.getJSON(resfile, function(data){
  4. $("#log").html(data.logres);
  5. callback(data.ret=='true');
  6. });
  7. }
  8.  
  9. function CheckLogin(a){
  10. PreCheckLogin(a, function(rrr){
  11. if(rrr){return true;}
  12. else return false;
  13. });
  14. }

Spodziewałem się poprzez wywołanie drugiej funkcji uruchomić pierwszą, która wypisze co ma wypisać. A druga w tym samym czasie zwróci true lub false.... ale nie działa...

[Edit]

Po chwili namysłu... powyższy kod nie ma prawa działać biggrin.gif
W każdym razie poradziłem sobie i wszystko już działa jak należy.
Dzięki za linka!

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.