Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAJAX] cos sie sypie ;|
Forum PHP.pl > Forum > XML, AJAX
Crazy_Ivan
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
msulik
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;
    }
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.