Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [advAJAX] cos sie sypie ;|
Crazy_Ivan
post 4.08.2007, 19:24:25
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.07.2007

Ostrzeżenie: (0%)
-----


Zrobiłem sobie formularz do wysyłania maila i napisałem bardzo prosty skrypt do obsługi.

  1. function sprawdz()
  2. {
  3. var zapytanie = "http://adres.pl/formularz_ajax.php";
  4. advAJAX.assign
  5. (document.getElementById("formularz"),{
  6. url : zapytanie,
  7. parameters :
  8. {
  9. "imie" : document.getElementById("imie").value,
  10. "e_mail" : document.getElementById("e_mail").value,
  11. "tresc" : document.getElementById("tresc").value
  12. },
  13. onInitialization : function(obj) { document.getElementById("odpowiedz").innerHTML= '<img src="http://adres.pl/loading.gif"/>' },
  14. onComplete : function(obj) { document.getElementById("odpowiedz").innerHTML= "" },
  15. onSuccess : function(obj) { document.getElementById("odpowiedz").innerHTML = obj.responseText }
  16.  
  17. });
  18. }


Wciska button i działa tak jak powinno czyli wyświetla błędy jeśli jakieś pole jest niewypełnione. Niestety wciskając button ponownie wyskakuje alert "stack overflow at line 422" i wysyła dane normalnym sposobem czyli przeładowuje stronę(tylko w IE w FF nie wyskakuje alert tylko od razu przeładowuje ). Według mnie to trochę dziwne ponieważ jeżeli za pierwszym razem gdy wywołuje funkcje jest wszystko ok to za drugim też powinno. Jeśli by ktoś wiedział o co chodzi w tym bardzo bym prosił o pomoc
Go to the top of the page
+Quote Post
msulik
post 10.08.2007, 12:31:21
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Metoda assign() służy do "skojarzenia" ajaksowego wywołania z formularzem. Wywołując assign(), przedefiniowujesz funkcję wywoływaną przy zdarzeniu "onsubmit", inaczej mówiąc dajesz znać przeglądarce, że przy wysłaniu formularza ma zostać wywołany ajax z podanymi parametrami. Należy to zrobić TYLKO RAZ po zbudowaniu formularza, a NIE za każdym razem przy wciśnięciu "Submit". U Ciebie wyłazi stack overflow, ponieważ po drugim kliknięciu "Submit" następuje z grubsza następujące przedefiniowanie "onsubmit":
Kod
mojformularz.onsubmit = function(...)
{
  sprawdz();
  mojformularz.onsubmit(); // * patrz wyjaśnienie niżej
}

* Za pierwszym razem mojformularz.onsubmit() jest "pustą" metodą, za drugim razem już posiada wnętrze i wtedy następuje nieskończone rekurencyjne wywołanie.

Zajrzyj do advajax.js, chodzi o poniższy fragment metody assign()
Kod
form["onsubmit"] = function() {
        if (typeof this["_onsubmit"] != "undefined" && this["_onsubmit"]() === false)
            return false;
        if (advAJAX.submit(this, this["advajax_args"]) == false)
            return true;
        return false;
    }


Ten post edytował msulik 10.08.2007, 12:34:28


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:08