![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
orientujecie się jakie są najlepsze techniki przy anulowaniu requestów Ajaxowych? Już tłumaczę o co chodzi: Załóżmy, że piszemy skrypt autocomplete dla inputa. Ktoś wpisuje kolejno litery:
Z oczywistych przyczym każde zdarzenie nie może generować osobnego requestu asynchronicznie, bo mielibyśmy śmietnik. W takim razie jakie są zalecane techniki w takich sytuacjach? Bawiłem się w coś takiego:
Działa prawidłowo, ale nie tak szybko jak powinno. Wygląda to tak, jakby metoda .abort() nie działała natychmiastowo. Da się to odczuć w tym przypadku, gdy szybko piszemy w tym polu. Odpowiedź przychodzi o wiele później niż w przypadku powolnego pisania. Pomysły? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 728 Pomógł: 76 Dołączył: 12.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Bo wysłanie, przetworzenie odpowiedzi przez serwer i jej obsługa po stronie klienta trochę trwa. Nie jest to długo ale przy szybkim wpisywaniu tekstu może być odczuwalne.
Nie rozumiem natomiast czemu: Cytat Z oczywistych przyczym każde zdarzenie nie może generować osobnego requestu asynchronicznie Przecież właśnie wykonywanie żądania asynchronicznie znaczy tyle, że skrypt nie musi czekać na odpowiedź serwera i jest ogólnie zalecane. Jak wspomniałem w twoim przypadku to najprawdopodobniej kwestia przetworzenia i obsłużenia w krótkim czasie x requestów. Robisz coś na wzór Google Suggest, więc chodzi Ci o ograniczenie liczby request-ów wysyłanych do serwera. Sugeruję zrobić tak, że jeśli użytkownik wpisuje znaki szybciej niż ustalony limit czasowy (250-300ms) skrypt resetuje wskaźnik czasu i jednocześnie ustala go na nowo dla setTimeout, który obsługuje żądanie do serwera. Schemat wygląda tak : - tworzysz zmienną przechowująca wskaźnik czasu - resetujesz wskaźnik funkcją clearTimeout kiedy ma być wykonane żądanie do serwera - wykonujesz żądanie za pomocą seTimeout z ustalonym opóźnieniem czasowym i przypisujesz jego wynik do zmiennej przechowującej wskaźnik czasu. Dzięki temu jeśli user będzie szybszy niż czas to wskaźnik będzie resetowany patrz pkt.2 i żądanie nie będzie wykonane. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 09:25 |