Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> [jQuery/AJAX] Jak najlepiej mogę rozwiązać problem wysyłania danych na serwer i ich odbierania, czyli działanie asynchroniczne, czy synchroniczne i problemy z nimi?
sebap123
post 19.11.2011, 17:30:57
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
nospor
post 19.11.2011, 17:33:51
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pytasz już o to w innym temacie. Kontynuuj tam


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Closed 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: 12.06.2025 - 16:41