![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Mam pewien problem ze swoim skryptem. Umieściłem w nim weryfikację e-mail przy pomocy skryptu php. Z formularza do skryptu dane przy pomocy skryptu w jQuery i ajaxa przechodzą do skryptu.
Generalnie przechodzą i są sprawdzane poprawnie. Problem polega na tym, że nie wiem jak dane przychodzące sprawdzić i coś na tej bazie zrobić. fragment kodu o który mi chodzi wygląda następująco:
Jak dla mnie wszystko działa tzn. wysyłam dane do pliku test2.php a następnie dzięki funkcji przy atrybucie sukces odbieram dane i jeśli jest true to ustawiam flagę. Potem, jeśli flaga jest correct to kończę funkcję z wynikiem true. Rzeczywistość jest jednak inna - gdy wykonuję skrypt to zawsze najpierw wywołany zostaje alert z nr 2 a dopiero potem z nr 1 czyli tak jakby kod był wykonywany od dołu i dlatego nigdy flag nie jest przypisany. Tutaj jest cała strona na której to testuje: http://sebastianperyt.pl/javascript/testJQ.html Będę wdzięczny za podpowiedzi. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 395 Pomógł: 80 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
W firebugu widzę że twój skrypt zwraca false, więc flaga nie jest correct i wyświetlany jest alert z napisem 2
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Wiem, że skrypt zwraca false, ale dlatego, że najpierw wykonuje się dół skryptu, a potem dopiero góra, czyli przypisanie flagi. Można to zobaczyć przy wyświetlaniu formularzy. Najpierw się wyświetla nr 2 a potem nr 1
EDIT: Wszystko wygląda teraz tak, jakby zmienna flag nie zachowywała swojego przypisania. Ponieważ po pierwszym przypisaniu wartości data potem ją gubi i wraca do początkowych ustawień (tak się dzieje w Firefoksie) natomiast w Chromie tak jak mówiłem "leci od tyłu", czyli najpierw sprawdza zawartość zmiennej flag a potem dopiero ja przypisuje. Ten post edytował sebap123 17.11.2011, 22:53:37 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
ajax wykonuje się asynchronicznie. Tzn. ze zapuszczasz ajax, id od razu idą dalsze polecenia js, a ajax sobie działa w tle. Także Twoja funkcja success może się wykonać np. po dwóch sekudanch po odpaleniu - wszystko zależy jak szybko odpowie serwer. A w tym czasie może się spokojnie wykonać cały inny dalszy kod js. Także ten kod:
if(flag=="correct") alert("ok"); else alert("2."+flag); Jest bez sensu, bo odpala się niezależnie od wyników zwracanych przez serwer. Jeśli ten kod ma mieć sens, to ma być wykonywane w funkcji success -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
No dobra, to trochę mi rozjaśniłeś już sprawę. Problem jednak w tym, że nie wiem jak inaczej mogę wykonać to co mam wykonać, czyli po prostu chce, żeby cała funkcja validateEmail zwróciła mi albo true albo false w zależności od tego jaki był jej wynik na który składa się sprawdzenie rozmiaru - to po to, żeby niepotrzebnie nie wysyłać danych na serwer które i tak są bez sensu, a także sam wynik operacji walidacji na serwerze.
Można oczywiście dodać jakąś animację oczekiwania - tyle tylko, ze średnio wiem jak ją umieścić, lub wpisać parametr ajaxa async:false, ale napisane jest, że może to zablokować okno przeglądarki. Własnie dlatego, nie mam pomysłu co z tym zrobić i jak ten problem rozwiązać. Czy ma ktoś może jakąś sugestię? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Cytat ajax wykonuje się asynchronicznie A co jeśli w Ajaxie zastosujemy. Async:false; ? Cytat lub wpisać parametr ajaxa async:false, ale napisane jest, że może to zablokować okno przeglądarki Ja u siebie mam i półki co jeszcze nic mi nie zablokowało-chyba są to skrajne przypadki. Ten post edytował Niktoś 18.11.2011, 21:01:28 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Dzięki za pomoc. Własnie potrzebowałem opinii kogoś kto już tego rozwiązania używa. Problem rozwiązany.
EDIT: Niestety muszę umieścić edita z powtórzeniem pytania, lub jego niewielka zmianą. Zacząłem teraz testować walidację z ajaxem wysyłanym z parametrem async:false, czyli zapytanie jest wysyłane synchronicznie. W moim wypadku niestety skrypty sprawdzające (podłączenie do bazy w celu sprawdzenia loginu czy emaila, a także sprawdzenie emaila na podstawie checkdnsrr) trwa na tyle długo, że jest odczuwalne to na stronie - rzeczywiści powoduje około sekundowe zawieszenie. Wyjście jakie przyszło mi do głowy to puszczenie go jednak w tle i dodanie np jakiegoś gifa z animacja ładowania, tyle tylko, że nie wiem jak to dodać do ajaxa, żeby się wykonywało w czasie oczekiwania na wynik i nie wiem jak wtedy na bazie wyniku zapytania zwrócić wynik z funkcji validateEmail. Czy może mi ktoś coś doradzić? Ponawiam swoją prośbę o pomoc w tym temacie. Jeszcze raz przeanalizowałem problem i doszedłem do wniosku, że bez działania asynchronicznego nie mam zielonego pojęcia jak poprawnie odebrać wynik z funkcji validateEmail(), a z asynchronicznym działaniem niestety zawieszanie strony jest zbyt znaczące. Czy ktoś już miał może taki problem i może coś poradzić? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 13:54 |