Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przepełnienie Stosu?
Forum PHP.pl > Forum > XML, AJAX
TomASS
Zrobiłem sobie formularz: link -> Jestem nowy (w prawym górnym rogu).

Moim zamiarem była walidacja przy użyciu AJAXa czy login lub e-mail w bazie istnieje. Plik "odpowiedzi" zwraca mi 3 różne odpowiedzi:
login - login istnieje
e_mail - e-mail jest w bazie danych
1 - wszystko okej, zapisano do bazy danych

i teraz gdy wpiszę istniejącego użytkownika (dla testów można wpisać jako login '1') wyświetla mi sie komunikat, że delikwent jest już bazie - ok, ale po ponownym wpisaniu wyskakuje:
Stack overfolw at line... i już jest nie w porządku :/

Kod JS:
Kod
function wyslij(){
        advAJAX.assign(document.getElementById("form_rej"), {
            onInitialization : function(obj) { ShowLoading(); },
                onSuccess : function(obj) {
                    if(obj.responseText=='login'){
                        alert('Użytkownik o takim loginie już istnieje w bazie danych.\nPopraw dane.');
                        $('login_re').value='';
                    }
                    if(obj.responseText=='e_mail'){
                        alert('e-mail już istnieje w bazie danych.\nPopraw dane.');
                        $('e_mail').value='';
                    }
                    if(obj.responseText=='1'){
                        $('tekst').innerHTML='Rejestracja zakończyła się pomyślnie';
                    }
                },
            onFinalization : function(obj) { HideLoading(); }
        });
}
yaro
Ja miałem taki sam problem. Wydaje mi sie że nie można wywoływać niektórych funkcji dwa razy sad.gif
Zrobiłem to tak:
strona pozaładowaniu: link - <a onclick="as(), as2()">link</a>
po kliknięciu na linka: <a onclick="as()">link</a>
Pisze tego posta już drugi raz i nie chce mi sie rozpisywać, bo wcześniej forum coś nie działało, i nie mam teraz czasu, ale jak coś to później moge służyć swoim doświadczeniem z tym problemem.
TomASS
Wydaje się to był bug w klasie advAJAX w metodzie assign, jak to przerobiłem na "standardowego" advAJAX.post to problem zniknął.
anAKiN
Tak, jest bug, co jednak nie zmienia faktu, ze metodę assign() powinno się wywoływać *tylko i wyłącznie* raz, a nie za każdym przesłaniem formularza, bo to zwyczajnie nie ma sensu.
TomASS
Wg mnie ma smile.gif
Wysyłam formularz do pliku. On sprawdza mi czy dane są poprawne (np. czy login/e-mail nie istnieje już w bazie danych), a jeśli wszystko jest ok, to dodaje użytkownika do bazy danych i zwraca mi rezultat. Jeśli rezultat jest negatywny, to użytkownik musi porpawić dane i wysłać formularz ponownie.
anopak
hmm, ale jak dobrze poczytałem dokumentację, to metoda assign wykonuje się raz i nie widzę potrzeby wykonywania jej drugi raz...
TomASS
To co powiedziałeś równie dobrze można było wywnioskować z postu anakina tongue.gif
A post wyżej napisałem Ci, że dla mnie ma sens.
anAKiN
Cytat
A post wyżej napisałem Ci, że dla mnie ma sens.

Czyli jednym slowem nie rozumiesz po prostu jak dziala assign().
TomASS
Tak - właśnie nierozumiem.

Cytat
Reasumując, aby wykorzystać AdvancedAJAX do wysłania danych formularza w tle wystarczy tylko wywołać metodę .assign(), przy czym można opcjonalnie podać dodatkowe argumenty AdvancedAJAX zapobiegające przedawnieniu czasu połączenia czy obsługujące rezultat wywołania adresu URL.


A ja wysyłam właśnie formularz - czyż nie?
anAKiN
Wybiórczo czytasz...
Cytat
Drugą z funkcji jest .assign(), która przyjmuje ten sam zestaw argumentów co poprzednio omawiana funkcja. Wywołanie tej funkcji z odwołaniem na wybrany formularz spowoduje, że AdvancedAJAX zostanie uruchomiony dopiero podczas naciśnięcia przycisku wysłania formularza (<input type="submit" ... />) lub każdej innej akcji, która wywoływała by standardowe procedury wysyłania formularza.

To, czego szukasz, jest wyzej:
Cytat
Pierwszą z nich jest .submit(), której wywołanie powoduje pobranie wartości wszystkich pól formularza i przesłanie ich pod adres URL jego akcji. Funkcja ta przyjmuje dwa argumenty. Pierwszym z nich jest wskaźnik do obiektu DOM formularza, czyli np. wynik działania funkcji document.getElementById(), drugim natomiast znana już lista argumentów AdvancedAJAX. W przypadku, gdy chcemy jedynie wysłać dane formularza, lista argumentów może pozostać pusta.
TomASS
Nadal nie widzę przyczyny dlaczego assign powinno wywoływać się tylko raz.
Nie pisze np:
Cytat
zostanie uruchomiony TYLKO I WYŁĄCZNIE podczas PIERWSZEGO naciśnięcia przycisku wysłania formularza

Dalej twierdzę, że jest sens wysyłania formularza wiecej niż raz.
anopak
już samo słówko przecież oznacza przypisz "assign"... przecież to już będzie przypisane do formularza, po co przypisywać jeszcze raz?
anAKiN
Cytat
przecież to już będzie przypisane do formularza, po co przypisywać jeszcze raz?

Otóż to. Do wysyłania służy submit() (wyślij), a nie assign() (przypisz)
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.