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ć:
Wtedy po wysłaniu wiadomości dwukrotnie w konsoli pojawi się błąd ze stacktrace'm. Nieoceniony sposób do debuggowania tego typu rzeczy
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.
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

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.