[AJAX] Walidacja danych logowania

Zła koncepcja. Zapytanie Ajaxowe wywołuje się równoległe z pozostałą częscią kodu. Nie możesz zwracać wyniku zaraz po wysłaniu zapytania gdyż ono po prostu nie ma odpowiedzi jeszcze w tym momencie.

Po xmlhttp.send(params); skrypt nie czeka na ajaxa tylko “leci” dalej i zwraca Ci zawsze false. Wywołanie ajaxa jest asynchroniczne, tzn. kod nie zatrzymuje się, tylko w osobnym wątku jest wykonywany a funkcja macierzysta przechodzi do następnego polecenia. Nie ma to może dużego znaczenia przy JS ale poczytaj sobie o programowaniu wielowątkowym aby zrozumieć samą ideę działania tego.

Powinieneś wysłać zapytanie i dopiero w funkcji obsługującej wynik (która wywoływana jest gdy ajax otrzyma odpowiedź) wpłynąć na formularz, tzn. wysłać go lub nie za pomocą metody nazwa_formy.submit() (strzelam, bo nie pamiętam jak ta metoda się nazywała dokładnie, ale chyba submit).

Muszę przyznać, że dałeś mi do myślenia. Właściwie, to sam się zastanawiałem, gdzie jest moment “stopu” i oczekiwania na wynik ajaxa, a tu się okazało, że go w ogóle nie ma…

Niektórzy twierdzą, że nie należy używać metody submit(), vide http://pornel.net/onclick->“submitowa wpadka” (polecam artykuły ;)), ale jeśli nie uda mi się wymyślić czegoś bardziej “politycznie poprawnego”, to zostanę przy Twoim rozwiązaniu, które skądinąd działa bardzo dobrze ;).

Dzięki za odpowiedź.

Tylko że autor tego artykułu zakłada że decyzja o wysłaniu formy nastąpi podczas kliknięcia a nie jakiś czas po.

Tak w ogóle to w momencie gdy Twój ajax działa należało by wygasić button wysłania formy aby nie można było 2x tego zrobić. Dopiero jeśli nie można wysłać (złe hasło) to zaświecić ponownie.

Druga sprawa, nie potrzeba Ci buttona submit, wystarczy input type=“button” i oprogramować onclick, bo i tak submita wywołujesz Ty więc button tego typu nic nam nie daje a tylko utrudnia.

Po trzecie, polecam jQuery :wink: to o czym tu mówimy można za pomocą tego frameworka zrobić w kilku linijkach.

OK, zgadzam się co do tego submit() - musi być w tym skrypcie :P. Zablokowanie przycisku też jest dobrym pomysłem, ale już zamiana buttona-submit na input-button + onclick raczej nie jest potrzebna, bo przecież nie każdy użytkownik wysyła formularz klikając myszą. Dlatego uważam, że lepiej zostawić ten przycisk i w deklaracji formularza dać po prostu onsubmit="return ...".

JavaScriptu zacząłem się uczyć dopiero dwa tygodnie temu, a Ajaxa od kilku dni, a że najpierw chcę porządnie opanować podstawy, to za jQuery zamierzam zabrać się później :wink:

Pozdrawiam!

Z tym wysyłaniem masz rację, faktycznie ktoś może użyć klawisza ENTER zamiast myszki, punkt dla Ciebie :), nie pomyślałem o tym. Widzę że czujesz już blusa.