Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAjax lub alternatywa] Request
Forum PHP.pl > Forum > XML, AJAX
zaksmok
Witam. Mam sobie formualrz rejestracyjnym, a w nim dwa pola do weryfikacji czy nazwa jest dostępna (załóżmy, że pola to nazwa1 i nazwa2). Przy onsubmit mam ustawioną funkcję validator();. Funkcja ta odpala request przez advAjax i zwraca napis w divie "nazwa jest wolna" lub "nazwa jest zajęta" lub "wystąpił błąd". Tutaj wszystko fajnie, ALE nie moge sobie poradzić ze zwróceniem return false jeśli nazwa jest zajęta / wsytąpi błąd. Próbowałem na pare sposobów przekazać return false i nie daje rady... Pomożecie?
Validator wywołuje makeRequest dla pola nazwa1 i nazwa2

  1. function makeRequest(type, outputDiv, id)
  2. {
  3. if(id.value=='')
  4. {
  5. reponse('Pole nie może być puste', outputDiv);
  6. }
  7. else
  8. {
  9. url = 'return.php?id='+id.value+'&type='+type;
  10.  
  11. advAJAX.get({
  12. url: url,
  13. onSuccess : function(obj){},
  14. onError : function(obj){},
  15. onFinalization : function(obj) {return 'smok';}
  16. });
  17. }
  18.  
  19. }
  20.  
  21. function reponse(text, outputDiv)
  22. {
  23. so_clearInnerHTML(document.getElementById(outputDiv));
  24. eDIV = document.createElement("div");
  25. eDIV.setAttribute("id","repon");
  26. eDIV.appendChild(document.createTextNode(text));
  27. document.getElementById(outputDiv).appendChild(eDIV);
  28.  
  29. }
  30.  
  31. function so_clearInnerHTML(obj) {
  32. while(obj.firstChild) obj.removeChild(obj.firstChild);
  33. }


Tutaj akurat zastowałem advAjax, ale próbowałem także mootools i podobnie nie potrafie zwrócić lub true...
Ar2r
Przecież sekcja onSuccess jest pusta więc co robisz przy pomocy Ajaxa?
zaksmok
normalnie jest tam

  1. onSuccess : function(obj){ reponse(obj.responseText, outputDiv) },


a chciałbym się dowiedzieć jak mogę przesłać return false...
Ar2r
Nieraz rozwiązania najprostsze są wystarczające. Ustawiaj w return.php jakiś tekst w przypadku gdy rekordy wystąpią w bazie (np. false) lub zwracaj pustą odpowiedź. Teraz w JS w przypadku pustego obj.responseText lub zawierającego to ustalone słowo (np. false) wyświetlaj komunikat o tym że nazwa jest zajęta.
Do obsługi błędów użyj sekcji onError
zaksmok
no tak, ale wyświetlenie komunikatu nie zablokuje mi akcji submit przecież.
Ar2r
No to zrób przycisk do wysylania jako button i jak będzie wszystko w porządku to w JS zrób form.submit()
zaksmok
hehe smile.gif a jak ktoś będzie miał wyłączony js to nie będzie mógł wysłać formularza wcale? Problem chyba już rozwiązałem. w metodzie onSuccess: dorzucam {document.myVariable = true;} a następnie po wywołaniu makeRequest odczytuje wartość myVariable i w funkcji Validator robie return dla formularza. Być może znacie jakieś lepsze rozwiązanie? Wydaje mi się, że można jeszcze ewentualnie wyłować form.onsubmit = false w momencie błędu, ale wtedy zablokuje się dalszą weryfikacje formularza. Czekam na jakieś propozycje winksmiley.jpg

Jednak nie... Wartość zapisuje się dopiero po wykonaniu onsubmit... Czekam dalej na help winksmiley.jpg
Ar2r
Jak ktoś będzie miał wyłączony js to twoje skrypty walidujące też nie zadziałająsmile.gif hehe
Możesz skorzystać z onsubmit w formie, a przycik typu submit
zaksmok
no nie zadziałają skrypty walidujące, ale formularz będzie działać. A jak wstawie button to nie wyśle bez JS. Chyba, że dopisze input type="submit" w <noscript></noscript> bo niepotrzebnie komplikuje kod.
Ar2r
Zrób może tak
- funkcja którą wywołujesz w onsubmit standardowo zwraca false
- w onSuccess jeśli warunki są poprawne wyślij formularz
zaksmok
też o tym myślałem, ale zauważ, że mam dwa takie pola i return true mogę zwrócić tylko wtedy, kiedy oba pola będą poprawne... Dlatego próbuje wynik requesta zapisać do zmiennej / tablicy w funkcji validator, na końcu zweryfikować dane i wykonać return odpowiedni... Dodatkowo fomularz ma kilka pól, które są weryfikowane, aby nie były puste, więc nie mogę tak zrobić jak napisałeś.
Ar2r
A w czym problem?
Ta funkcja wywoływana w onsubmit powinna zawierać normalną walidację pozostałych pól. Jeśli zakończy sie ona sukcesem wywołujesz dopiero Ajaxa
W pliku php do którego odwołuje się Ajaxa sprawdzaj od razu oba warunki na te 2 pola
zaksmok
no i traci sie tutaj uniwersalizm funkcji... W innym formie bede chcial sprawdzic tylko jedno pole i bede musial extra pisac php, js i htmla do obslugi...
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.