Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery/AJAX] Jak najlepiej mogę rozwiązać problem wysyłania danych na serwer i ich odbierania
Forum PHP.pl > Forum > Po stronie przeglądarki
sebap123
Mam pewien problem w skrypcie. Z jednej strony jest to problem natury "kodowej", z drugiej natury czysto ideowej.
Na swojej stronie mam formularz rejestracji. Jednym z pól jest pole email do wpisywania maila. Po stronie przeglądarki następuje sprawdzenie czy nie jest on za krotki jak na email, a następnie jest on wysyłany ajaxem na serwer w celu zweryfikowania poprawności na bazie strony podanej po znaku @ a także sprawdzenia, czy nie zawiera on jakichś dziwnych znaków.
Wynik zwracam do funkcji w opcjach metody ajax. Tak wygląda kod, który aktualnie posiadam:
[JAVASCRIPT] pobierz, plaintext
  1. var email = $("#email");
  2. var emailInfo = $("#emailInfo");
  3. email.blur(validateEmail);
  4.  
  5. function validateEmail()
  6. {
  7. var text = email.val();
  8. var flag = "napis";
  9. if(email.val().length<5)
  10. {
  11. errorInput(email,emailInfo,"Za krótki email");
  12. return false;
  13. }
  14. var request = $.ajax({
  15. type:"POST",
  16. url:"test2.php",
  17. data:"opcja=email&wartosc="+text,
  18. async:false,
  19. success:function(data){
  20. flag = data;
  21. },
  22. error:function(XMLHttpRequest, textStatus, errorThrown)
  23. {
  24. errorInput(email,emailInfo,"Wystąpil błąd na stronie");
  25. return false;
  26. }
  27. });
  28. /*email.ajaxStart(function(){
  29.   email.html('<img src="load.gif"/>');
  30.   });*///@moja proba wlaczenie loada
  31. request.fail(function(){alert("Wystąpił błąd");});
  32. if(flag=="true")
  33. {
  34. correctInput(email,emailInfo,"OK");
  35. return true;
  36. }
  37. else
  38. {
  39. errorInput(email,emailInfo,"Zły adres e-mial");
  40. return false;
  41. }
  42. }
[JAVASCRIPT] pobierz, plaintext


Jak widać nie mogę zwrócić bezpośrednio z funkcji w opcji success true lub false, bo nie zwróci mi się wtedy wynik z działania całej funkcji validateEmail, a jest mi on potrzebny. Dlatego postanowiłem zastosować flage, której nadaję wartość wynikową wywołania skryptu php. Żeby zostało to odpowiednio odczytane przez resztę funkcji validateEmail zastosowałem asynchroniczne wysyłanie.
Właśnie tutaj występuje pewien problem, bo zgodnie z dokumentacją takie wywołanie powoduje chwilowe zawieszenie strony w zależności od czasu wykonania zapytania. Niestety dokumentacja nie kłamie i już teraz, przy zerowym obłożeniu serwera i niełączeniu się z bazą danych ten ułamek sekundy jest odczuwalny. Próbowałem dodać gifa z animacja ładowania - to też się nie udało, ale to jest tylko ozdoba informująca, że coś się dzieje, cały czas strona jest "zatrzymywana" na chwilę.
Tak więc wygląda mój pomysł i moje wykonanie. Teraz zwracam się do was z pytaniem, jak mogę to wykonać, żeby walidacja emaila przebiegała sprawnie i poprawnie, czyli żeby nie było odczuwalne to zawieszenie się strony, poprawnie został zwrócony wynik z funkcji validateEmail i ewentualnie, żeby się włączyła animacja ładowania, w czasie gdy skrypt będzie oczekiwał na odpowiedź ze skryptu.
nospor
Pytasz już o to w innym temacie. Kontynuuj tam
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.