![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 14.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
może ktos pomoże, bo juz 3.36 czyli mecze sie z tym od ponad 3 godzin ![]() Jak mam wziąc zmienna 'login_ok' wyprowadzic na zewnatrz? probowalem na wiele sposobow, var lo_ok = checkLogin(); zwraca undefined ;/ dzieki ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
w ten sposób w jaki próbujesz - nie da sie. wynika to ze sposobu działania AJAX'a. funkcja, która podstawiasz do onreadystatechange wywołuje się dopiero PO otrzymaniu odpowiedzi z serwera... a zanim to nastąpi, twoja funkcja checkLogin() dawno już skończy swoje działanie... proponuję, żebyś zamiast takiej konstrukcji zdefiniował sobie dodatkową funkcję, np. loginAnswer(login_ok){...} i wywoływał ją tam gdzie teraz ustawiasz login_ok, czyli:
Kod // wewnątrz checkLogin(), zamiast login_ok = 1; // wpisujesz loginAnswer(1); // i definiujesz sobie funkcję function loginAnswer(login_ok) { // i tutaj wpisujesz kod, zalezny od tego czy serwer potewierdził login czy nie... } można to zrobić na różne sposoby, ale tak jak proponuję nie będziesz miał zbyt wielu zmian w swoim kodzie... powodzenia. Ten post edytował nevt 27.01.2008, 12:06:39 -------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 603 Pomógł: 131 Dołączył: 24.07.2007 Skąd: Górny Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Ten login_ok jest zwracany przez tę funkcję wewnętrzną. A nie przez checkLogin(). Dlatego zawsze zwróci undefined - bo 'nic' nie zwraca i to 'nic' chcesz przypisac do zmiennej lo_ok.
Musiałbyś return z login_ok przenieść przed ostatni nawias klamrowy. Ten post edytował lord_t 27.01.2008, 12:09:51 -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 14.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
w ten sposób w jaki próbujesz - nie da sie. wynika to ze sposobu działania AJAX'a. funkcja, która podstawiasz do onreadystatechange wywołuje się dopiero PO otrzymaniu odpowiedzi z serwera... a zanim to nastąpi, twoja funkcja checkLogin() dawno już skończy swoje działanie... proponuję, żebyś zamiast takiej konstrukcji zdefiniował sobie dodatkową funkcję, np. loginAnswer(login_ok){...} i wywoływał ją tam gdzie teraz ustawiasz login_ok, czyli: Kod // wewnątrz checkLogin(), zamiast login_ok = 1; // wpisujesz loginAnswer(1); // i definiujesz sobie funkcję function loginAnswer(login_ok) { // i tutaj wpisujesz kod, zalezny od tego czy serwer potewierdził login czy nie... } można to zrobić na różne sposoby, ale tak jak proponuję nie będziesz miał zbyt wielu zmian w swoim kodzie... powodzenia. Dzieki za pomoc, tylko ze moj problem polega na tym ze ja potrzebuje wlasnie ten login_ok urzyc w innej funckcji. PO prostu chodzi o to zeby funkcja ktora rejestruje (tez w ajaxie) po nacisnieciu przycisku wyslij, nie sprawdzala drugi raz czy login jest wolny, ale wlasnie wziela te informacje z check_login, wkleje tutaj jeszcze tę funkcje rejestrującą.
Ten login_ok jest zwracany przez tę funkcję wewnętrzną. A nie przez checkLogin(). Dlatego zawsze zwróci undefined - bo 'nic' nie zwraca i to 'nic' chcesz przypisac do zmiennej lo_ok. Musiałbyś return z login_ok przenieść przed ostatni nawias klamrowy. Próbowałem tak, ale wtedy miałem bład ze login_ok nie zdefiniowana, bo byla definiowana w tej wewnetrznej funkcji, z kolei jak zdefiniowalem w funkcji zewnetrznej, to ta wewnetrzna jej nie zmieniala, i caly czas byla taka jak zdefiniowalem. mimo to dzieki;) Ten post edytował BirdWatcher 27.01.2008, 12:17:28 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
masz już prawie dobrze, tylko zrozum, że nie da się tego zrobić przez przekazanie zmiennej w kodzie. postaram ci się to wytłumaczyć:
1. Wywołujesz funkcję checkLogin()... 2. Funkcja ta generuje w AJAX zapytanie do serwera... 3. Przeglądarka NIE CZEKA na wyniki z serwera, tylko dalej wykonuje twoją funkcję checkLogin()... dlatego wewnątrz niej NIE JESTEŚ W STANIE określić login_ok 4. Po pewnym czasie serwer przesyła do przeglądarki odpowiedź i dopiero WTEDY jest wywoływana funkcja przypisana wcześniej do onreadystatechange (to pewne uproszczenie ale wystarczy żeby zrozumiał istotę problemu). 5. Wniosek tego z taki, że tylko wewnątrz tej funkcji przypisanej do onreadystatechange możesz określić co ma zrobić przeglądarka z danymi zwróconymi przez serwer... Podsumowując, musisz zmienić logikę i organizację twoich skryptów... mniej więcaj tak: 1. kliknięcie na guzik "zaloguj" wywołuje funkcję powiedzmy tryLogin(user, pwd). 2. wewnątrz niej robisz zapytanie AJAX i rejestrujesz funkcję obsługi odpowiedzi (przypisaną do onreadystatechange) 3. wewnątrz tej funkcji określasz, czy logowanie powiodło sie... 4. i wtedy dopiero wywołujesz funkcję odpowiedzialną za reakcję na udane lub nieudane logowanie, np. registration(login_ok); powodzenia. Ten post edytował nevt 27.01.2008, 12:41:05 -------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 14.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
dzieki, juz rozumie dlaczego nie dziala
![]() wewnątrz checkLogin, zamiast login_ok=1 daje np. ifLoginOk(1) a ta funkcja wyglada po prostu tak : ifLoginOk(login){ var login_ok = login; return login_ok; } i czy teraz ta zwrocona login_ok bedize dostepna dla innych funkcji czy nadal nie bardzo ? sory za takie lamerskie pytania, ale o js nie mam zbytniego pojecia i staram sie to w pewien sposob wzorowac na PHP o ktorym wiem co nieco ![]() PS> i jeszcze do tego co napisales powyżej, ten sposob rozumie, tylko ze wtedy ajax sprawdzajacy czy login jest w bazie bedzie wywolywany 2 razy, jeden bo opuszczenia pola login w formularzu, a drugi po nacisnieciu wyslij, i wlasnie zastranawiam sie nad tym czy da sie to ominac. Ten post edytował BirdWatcher 27.01.2008, 12:51:47 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 04:12 |