Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

[js/ajax] blad w walidacji formularza

Tworzenie dynamicznych stron internetowych z zastosowaniem JavaScript, jQuery, Ajax. Dowiedz się jak to zrobić, znajdź rozwiązania swoich problemów.

[js/ajax] blad w walidacji formularza

Post 30.11.2005, 16:06:28

Witam,

validuje sobie pewnien formularz za pomoca nastepujacego kodu:

Kod: Zaznacz cały
function sprawdz_edytuj()
{
    var x;
   
    if (document.edytuj.dane.value == '')
    {
        alert('Proszę podać nowe imię i naziwsko.');
        document.edytuj.dane.focus();
        return false;
    }
    else if (document.edytuj.stare_haslo.value != '' || document.edytuj.haslo.value != '' || document.edytuj.haslo2.value != '')
    {
        if (document.edytuj.stare_haslo.value == '')
        {
            alert('Proszę podać stare hasło.');
            document.edytuj.stare_haslo.focus();
            return false;
        }
        else if (document.edytuj.haslo.value == '')
        {
            alert('Proszę podać nowe hasło.');
            document.edytuj.haslo.focus();
            return false;
        }
        else if (document.edytuj.haslo.value.length < '6')
        {
            alert('Nowe hasło powinno składać się z minimum 6 znaków.');
            document.edytuj.haslo.focus();
            return false;
        }
        else if (document.edytuj.haslo2.value == '')
        {
            alert('Proszę powtórzyć nowe hasło.');
            document.edytuj.haslo2.focus();
            return false;
        }
        else if (document.edytuj.haslo.value != document.edytuj.haslo2.value)
        {
            alert('Podano dwa różne hasła.');
            document.edytuj.haslo2.value = '';
            document.edytuj.haslo2.focus();
            return false;
        }
        else if (document.edytuj.stare_haslo.value != '')
        {
            if (window.ActiveXObject)
            {
                x = new ActiveXObject('Microsoft.XMLHTTP');
            }
            else if (window.XMLHttpRequest)
            {
                x = new XMLHttpRequest();
            }
            if (x)
            {
                x.open('GET','ajax/ajax.php?d=sprawdz_haslo&id='+document.edytuj.edytuj.value+'&v='+document.edytuj.stare_haslo.value,true);
                x.onreadystatechange = function()
                {
                     if (x.readyState == 4)
                    {
                        if (x.responseText != "1")
                        {
                            alert('Stare hasło jest nieprawidłowe!');
                            document.edytuj.stare_haslo.value = '';
                            document.edytuj.stare_haslo.focus();
                            return false;
                         }
                    }
                }
                x.send(null);
            }
        }
    }
    else
    {
        return true;
    }
}


Jak widac za pomaca AJAXa pobieram pobieram sobie haslo z bazy danych, porownuje je i w zaleznosci od tego czy hasla sa takie same czy nie wyswietlam komunikat. Problem lezy w tym, ze przy zlym hasle powinien wyswietlic sie komunikat a wysylanie formularza powinno zostac zatrzymane, jednak komunikat sie wyswietla a formularz wysyla sie dalej pomimo zwrocenia wartosci false... Dzieje sie tak, tylko przy sprawdzaniu danych z ajaxa, bo np. przy nie wypelnieniu pola dane pojawia sie komunikat i formularz sie nie wysyla... Prosze o pomoc.

Z gory dziekuje i pozdrawiam.
jsww
Posty: 32
Dołączył(a): 23.11.2005

Post 30.11.2005, 16:42:29

a formularz wysyla sie dalej pomimo zwrocenia wartosci false

to juz problem polaczen asynchronicznych. Skrypt wykonal odwolanie do ajax.php, czeka na odpowiedz i pozwala reszcie skryptow pracowac dalej, dlatego nastepuje prawdopodobnie wysłanie zanim request sie zakonczy. Nawet gdyby request sie szybciej skonczyl, return false nie odnosi sie do onsubmita.
Jednym z rozwiązań byłoby wykorzystanie requestów synchronicznych, ale tego sie na www nie stosuje, bo następuje zablokowanie przeglądarki i oczekiwanie na odpowiedź serwera.

Tutaj zamiast oczekiwać true/false przez eventHandlera onsubmit, musiałbyś skryptowo wysłac formularz (document.edytuj.submit()), a w razie nie spełnienia warunku nic nie robic, lub pokazać alerta.
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19764
Dołączył(a): 14.04.2002

Post 30.11.2005, 19:09:26

Hmm, tak podejrzewałem... Rozumiem o co Ci chodzi, ale nie zabardzo mi teraz zmieniac buttony do wysylania na linki itp... Wiec jeszcze jedno pytanie, mozna jakos za pomoca JS zatrzymac wysylanie formularza? Tak aby na porzatku funkcji sprawdzajacej zatrzymac caly submit i po sprawdzeniu wszystkich warunków wyslac formularz poprzez document.edytuj.submit() ?
jsww
Posty: 32
Dołączył(a): 23.11.2005


Powrót do JavaScript


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość

Hosting, Domeny, SSL

Subskrypcja

Mamy 51441 zarejestrowanych użytkowników.
Najnowszy użytkownik: jonman65


Nasi użytkownicy napisali:

  • 937643 wiadomości
  • w 247399 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)