Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z getJSON
gargamel
post
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

Ostrzeżenie: (0%)
-----


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 ... (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




http://eriz.pcinside.pl/weblog/ajax-w-jque...script-218.html
Go to the top of the page
+Quote Post
gargamel
post
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

Ostrzeżenie: (0%)
-----


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ć (IMG:style_emoticons/default/biggrin.gif)
W każdym razie poradziłem sobie i wszystko już działa jak należy.
Dzięki za linka!



Ten post edytował gargamel 20.10.2010, 23:31:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 07:52