Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 15.11.2010 Ostrzeżenie: (0%)
|
Witam, ostatnio napisałem post w dziale mysql (dublowanie zapytań SQL). W skrypcie był błąd, który został poprawiony i sytuacja się poprawiła,
ale ostatnio dostałem info od swojego klienta, że po wypełnieniu formularza znów dublują się zapytania w bazie danych MySQL. Forumowicze, mam do Was pytanie. Jak dokładnie działa funckja abort() w jQuery? Chodzi mi konkretnie o ustawiony timeout w Ajaxie i anulowaniu requestu w sekcji error. Już tłumaczę o co mi dokładnie chodzi, otóż: Użytkownik wypełnia formularz, jeśli wszystkie pola zostaną wypełnione a walidacja nie zwróci błędu do skryptu PHP leci ciąg JSON. W metodzie AJAX ustawiony jest timeout na 3 sekundy. Po trzech sekundach od nie otrzymania success uruchamia się funkcja z informacją dla użytkownika, że jego zlecenie jest przetwarzane (w tym momencie AJAX zwrócił error i ponawia wysłanie ciągu JSON do tego samego skryptu PHP w przeciągu jednej sekundy i tak w kółko... aż do momentu wyrobienia się przeciągu 3 sekund, czyli AJAX success). Wszystko zależne jest od obciążenia serwera. Jeśli obciążenie jest znikome, komunikat o przetważaniu dancyh nawet się nie włącza. Jeśli obciążenie jest nieco wyższe, wtedy funckja uruchamia się po trzech sekundach. Bywa też tak, że komunikat się pokaże, po chwili zniknie a wpis się nie zdublował. Głowię się już nad tym około tygodnia. Jak to wygląda w praktyce? Czy możliwym jest, że wysłany ciąg JSON leci do serwera, w bazie kolejkowane są zapytania, minęły 3 sekundy, w tym momencie uruchamia się wyżej opisana funckja i ponawiane jest to samo zapytanie mimo tego, że wpis już został prawidłowo dodany? czyli tak jakby funckja wykonuje się ponownie, ponieważ AJAX nie zdążył zwrócic success? Efekt ma być taki, żeby najpóźniej po 3 sekundach od kliknięcia w przycisk "Wyślij", jeśli skrypt jeszcze przetwarza dane ponieważ serwer jest obciążony, użytkownik otrzymał odpowiednią informację, żeby nie pomyślał, że coś się zawiesiło albo coś podobnego. Myślałem, że użycie w tym wypadku AJAX error jest dobrym rozwiązaniem ale zauważyłem, że pomimo 3 zabezpieczeń takich jak - zdjęcie zdarzenia z przycisku po jego kliknięciu, - przypisanie wartości zmiennej "s" = 1, która powoduje, że ponowny request nie może być wysłany. Wartość 0 wraca po otrzymaniu AJAX success, - zabezpieczenie skryptu PHP sesją, która pozwala wysłać następne zlecenie dopiero po 5 sekundach ...nadal występuje problem z dulowaniem zleceń, Proszę o pomoc. Ten post edytował SeaDog 26.09.2014, 19:48:48 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 6 809 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%)
|
Ok, to wróćmy może do abort.
Gdzie wywołujesz? |
|
|
|
SeaDog jak dokładnie działa abort() w jQuery? 26.09.2014, 19:44:42
trueblue W jakim momencie uruchamiasz 2 pierwsze zabezpiecz... 27.09.2014, 18:23:16
SeaDog Pierwsze zabezpieczenie (zdjęcie zdarzenia z przyc... 28.09.2014, 17:57:40
SeaDog [HTML] pobierz, plaintext <script>$(doc... 28.09.2014, 18:34:48
trueblue Spróbuj tak:
[HTML] pobierz, plaintext $(do... 28.09.2014, 18:46:53
SeaDog Zmienna timer jest chyba nie potrzebna, ponieważ s... 28.09.2014, 18:57:33
trueblue Tak. Powinno być:
timer=setTimeout(function(){send... 28.09.2014, 19:13:15
SeaDog Oczywiście, masz rację z clearTimeout(); tylko ja ... 28.09.2014, 19:53:07
trueblue Które rozwiązanie eliminuje duplikaty? 28.09.2014, 21:13:10
SeaDog Twojego rozwiązania nie testowałem. Myślałem, że o... 28.09.2014, 21:51:04
trueblue Cytat(SeaDog @ 28.09.2014, 22:51:04 )... 29.09.2014, 14:18:04
SeaDog Dziękuję bardzo za pomoc. Zapoznam się jeszcze z s... 30.09.2014, 09:51:19 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 15:21 |