Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z czatem drużynowym
#1
ID zawodnika : 11295
ID drużyny :
ID zawodów :
Opis Błędu + Screeny :
Ogólnie rzecz biorąc problem jest z pisaniem wiadomości na czacie, gdzie zatwierdzamy jedną wiadomość i od razu piszemy kolejną wiadomość. Bardzo często jest tak, że początek tego co właśnie piszemy zostaje usunięte. Dodatkowo po każdej wysłanej wiadomości na chwilę przeskakujemy do nowej linii w polu tekstowym i zdarza się, że zatwierdzamy tekst razem ze znakiem nowej linii na początku (\r\n). Dzieje się tak dlatego, gdyż brakuje na samym początku w kodzie wysyłającym wiadomość linijki: "e.preventDefault();", czyli zablokowania standardowego zachowania się klawisza enter, czyli przejścia do nowej linii.
Co do znikania części wiadomości, to teraz jest tak, że po wysłaniu wiadomości pole tekstowe jest czyszczone dwukrotnie. Można to w bardzo prosty sposób wykryć. Wystarczy w konsoli wywołać:

Kod:
var textarea = document.getElementById("texttt");
Object.defineProperty(textarea, 'value', {
   set: function() { throw new Error('Textarea modified.'); }
});

Wtedy po wysłaniu wiadomości dwukrotnie w konsoli pojawi się błąd ze stacktrace'm. Nieoceniony sposób do debuggowania tego typu rzeczy Smile
Za pierwszym razem pole czyszczone jest za pomocą jQuery: "$('#texttt').val('');" i dzięki temu możemy od razu pisać kolejną wiadomość po klawiszu enter, ale niestety jest też kolejne czyszczenie po wykonaniu operacji submit na formie (standardowe zachowanie submit). I o ile pierwsze czyszczenie jest natychmiastowe, to kolejne czyszczenie niestety już nie, bo zdarza się u mnie, że żądanie na serwerze stoi nawet 2 sekundy lub więcej i właśnie wtedy przez te 2 sek można napisać kilka znaków i nagle żądanie wraca z serwera i następuje wyczyszczenie tego co zostało wpisane. Ogólnie rzecz biorąc korzystanie z submita formy w tym wypadku nie jest dobrym rozwiązaniem. O wiele lepsze będzie ręczne wysłanie POSTa, a pole tekstowe nie musi być wtedy opakowane w forme. Wtedy po kliknięciu w ENTER proponuję następujący algorytm (nadal na zdarzeniu keydown):
1. e.preventDefault();
2. Zapisanie wartości pola tekstowego w zmiennej.
3. Wyczyszczenie pola tekstowego.
4. Wysłanie żądania POST z przekazaną wartością zapisaną w zmiennej.
5. Na zdarzeniu SUCCESS wysłania wiadomości (pkt 4) wykonać odświeżenie chatu, żeby dopiero po powrocie żądania z serwera chat był od razu odświeżony. Bo teraz zdarza się czasami też tak, że po wysłaniu wiadomości nie widzimy jej przez jakiś czas, bo odświeżenie po kliknięciu następuje szybciej niż wysłanie naszej wiadomości na serwer. I w takim przypadku widzimy wiadomość dopiero gdy timer odświeży czat.

Te kroki zapewnią nam taki sam komfort korzystania z czatu jaki mamy na fb, czy innych czatach tego typu.

Pisałem kiedyś komunikator dla firmy i również borykałem się z takimi problemami, dlatego chciałem się tym podzielić, żeby przyjemniej nam wszystkim korzystało się z czatu.

PS. Jak już jestem przy czacie, to mam pytanie, czy możecie zwiększyć częstotliwość odświeżania się czatu? Teraz jest to 7.5 sek, co według mnie jest stanowczo za długo, przez co często po prostu odświeżam stronę jak rozmawiam, bo jest to szybsze. Powinna być to przynajmniej jedna sekunda, żeby ta rozmowa normalnie wyglądała, a serwera też to nie obciąży.
#2
No no Smile , a i tak nie ogarniam tego co @brylu napisał, zgubiłem się przy epreventDefau..... Tongue
#3
no ja teżSmile
#4
Ja w tym samym miejscu co wy jestem, polać jak już sobie tu utknęliśmy? Wink

Moge też po Polsku to opisać, bo też to mam. W momencie gdy piszemy i jest zamuła tudzież mielenie, to wtedy ucina to co napisaliśmy zanim odmuliło. Bo jak gra chodzi płynnie to normalnie się pisze Smile
#5
To chyba większość tak ma, a jak ucina to wstawia przed zdanie cuś takiego mniej więcej Tongue //
[Obrazek: 8889506634a6af2954c364.jpg]
#6
Wszyscy tak mają, tyle, że @brylu jest po prostu znacznie bardziej do przodu technicznie Big Grin i na chłopski rozum wszystko co napisał ma sens. Teraz czerwoni powinni to wykrozystać. Smile
Piszę poprawnie w języku polskim, bo szanuję swoich rozmówców.
Wolę poświęcić kilkanaście sekund na sprawdzenie tego co napisałem
niż kompromitować się publicznie i szerzyć w internecie błędy językowe.
#7
Etam dla mnie jest to bardzo zrozumiałe Big Grin normalnie jak zrobienie jajecznicy Big Grin
Klub:+++DEATH RIDERS+++
#8
Ja to w przedszkolu już takie tematy przerabiałem <zieeeew> Tongue
[Obrazek: 8889506634a6af2954c364.jpg]
#9
hahahaBig Grin
#10
Bryły chyba nas obraził...
Na wszelki wypadek zgłoszę

(02-01-2018, 11:54:38)Houczas napisał(a): Bryły chyba nas obraził...
Na wszelki wypadek zgłoszę
Brylu oczywiście


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości