Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kolejność wykonywania funkcji
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Inscure
Witam,

Mam skrypt, który waliduje dane wprowadzane w formularzu.
W momencie klknięcia w button wykonywane jest przejście po określonych z góry polach w celu sprawdzenia poprawności wprowadzonych danych.

Jednym z pól jest pole "e-mail". Pobierana jest z niego wartość i wysyłana do pliku PHP przez ajax celem sprawdzenia dostępności e-mail.
Jeśli adres jest zajęty, to do znacznika <span id="info_nazwapolainput"></span> dodawany jest kolejny znacznik z klasą ".formInfo".

Na koniec wykonuje się sprawdzenie, czy istnieje na stronie znacznik o podanej wyżej klasie. Jeżeli nie występuje, to znaczy że formularz wypełniono poprawnie.
Cały problem w tym, że warunek wykonuje się przed otrzymaniem danych zwrotnych z ajax, tak jakby skrypt nie czekał wcale na nie tylko leciał drugim wątkiem dalej.

Kod wygląda w ten sposób:

Kod
checkPersonal(true); // walidowanie pól
// od razu wykonuje się to co niżej, zamiast checkPersonal skonczy dzialanie
// tj otrzyma dane zwrotne z pliku php przez ajaks i wyswietli na stronie znacznik z klasa .formInfo
        var errors = errorExists2();
        if (errors) {
            goToFirstError();
        } else {
                   // submit() // skutkiem tego wykonuje się zawsze ten tu submit nawet jesli w errors jest 0.
                }


Czemu tak się dzieje i co z tym zrobić? Prosze o podpowiedź.

PS Efekt taki, że za każdym razem tak jakby nie wykrywało błędów. Jak nałoże setTimeout() przed warunkiem to działa, ale nie cce w ten sposób..
PS2 Wystepowanie .formInfo sprawdzam przez .length
wszerad
Prawdopodobnie ajax jest ustawiony na asynchroniczny tz:
  1. xml.open(method, url, true);
trzeci parametr to wałsnie komunikacja asynchroniczna, i teraz masz dwie opcje, albo zmienisz ją na synchroniczną przez wpisanie false(odradzam), albo dalsza część walidacji będzie startować dopiero kiedy ajax zwróci wartość.
Inscure
No właśnie ja chce żeby startowała dopiero jak ajaks zwróci dane, a jest odwrotnie, startuje asynchronicznie.
Chyba chciałeś na koniec napisac, że nie zmieniajac (zostawiajac true) będzie startować zanim ajaks zwróci dane, wtedy rozumiem co miałeś na mysli?
wszerad
Nie wiem jak u ciebie wygląda funkcja odpowiedzialna za ajax, ale można w niej wprowadzić tak zwanny callback, czyli funkcje wykonywaną po zakończeniu transmisji, chodzi mi o to, żebyś kod walizacji umieścił w tym callbacku.
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.