Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ajax] automatyczne odświeżanie
d.stp
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Jak zrobić automatyczne odświeżanie np. co 15 sekund? Chodzi mi o autorski skrypt czata
Go to the top of the page
+Quote Post
masahuku
post
Post #2





Grupa: Zarejestrowani
Postów: 42
Pomógł: 4
Dołączył: 11.12.2009

Ostrzeżenie: (0%)
-----


Zależy czego. Ogólnie do wykonywania jakiś operacji po stronie klienta (jak np. odświeżanie całej lub części witryny) wykorzystuje się JS'owe cudo: setInterval.

http://www.w3schools.com/jsref/met_win_setinterval.asp
Go to the top of the page
+Quote Post
msm
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 2
Dołączył: 15.07.2010

Ostrzeżenie: (0%)
-----


Tu jest przykład odświeżenia części strony div'a co x czas.
Go to the top of the page
+Quote Post
jaslanin
post
Post #4





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

Ostrzeżenie: (0%)
-----


lepiej używać setTimeout: http://zetafleet.com/blog/why-i-consider-setinterval-harmful

  1. function myTimeoutFunction()
  2. {
  3. doStuff();
  4. setTimeout(myTimeoutFunction, 1000);
  5. }
  6.  
  7. myTimeoutFunction();
Go to the top of the page
+Quote Post
d.stp
post
Post #5





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Dzięki o to mi chodziło. Użyłem setTimeout i działa dobrze.

Teraz chciałbym zablokować możliwość pisania przed minięciem 3 sekund od poprzedniej wiadomości. Próbowałem coś z delay(), ale to chyba tutaj się nie sprawdzi.

I wie ktoś czy AJAX ma jakiś wpływ na brak polskich znaków? Mam kodowanie plików na utf-8, bazę utf8_general_ci + mysql_query("SET NAMES UTF8"), a dalej nie mam polskich znaków w wiadomościach.
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Cytat(d.stp @ 23.09.2012, 21:20:06 ) *
Teraz chciałbym zablokować możliwość pisania przed minięciem 3 sekund od poprzedniej wiadomości. Próbowałem coś z delay(), ale to chyba tutaj się nie sprawdzi.

W jaki sposób dodajesz wpisy? Tradycyjnie (formularz) czy ajaxem?
Go to the top of the page
+Quote Post
d.stp
post
Post #7





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


mam takie coś:
[JAVASCRIPT] pobierz, plaintext
  1. function chat_send() {
  2.  
  3. var msg = document.getElementById("chat_msg").value;
  4.  
  5. $.post('./chat.php', {msg:msg}, function(data){
  6. document.getElementById("chat_msg").value = '';
  7. chat_load();
  8. });
  9.  
  10. }
[JAVASCRIPT] pobierz, plaintext

a w PHP zwykłe zapytanie do bazy

Ten post edytował d.stp 23.09.2012, 20:44:38
Go to the top of the page
+Quote Post
markonix
post
Post #8





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Wystarczy utworzyć zmienną która będzie zawierała czas unix i porównywać przy wysyłaniu.
Jeśli różnica mniejsza niż 3 sekundy odpowiedni alert czy inny komunikat.

Można też po stronie PHP dodatkowo ale myślę, że to wystarczy spokojnie.
Go to the top of the page
+Quote Post
d.stp
post
Post #9





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Chyba źle szukam bo nie mogę nic znaleźć na temat unix time... zrobiłem to na sekundach, ale coś jest nie tak bo nie działa...

Chyba źle to w ogóle robię (IMG:style_emoticons/default/biggrin.gif)

[JAVASCRIPT] pobierz, plaintext
  1. var d = new Date();
  2. var aktualnyczas = d.getSeconds();
  3. var czaspo = aktualnyczas+3;
  4.  
  5. if (czaspo < aktualnyczas) {
  6. alert('zaczekaj');
  7. }
  8. else { // wyslij }
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
markonix
post
Post #10





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


10 sekund zajęło mi znalezienie funkcji w JS zwracającej czas unix (nie znałem jej).

[JAVASCRIPT] pobierz, plaintext
  1. new Date().getTime();
[JAVASCRIPT] pobierz, plaintext

Czas unix ale w milisekundach więc albo podziel przez 1000 albo przy warunku zamiast 5 (sekund) daj 5000 (milisekund).

Ten post edytował markonix 24.09.2012, 11:36:29
Go to the top of the page
+Quote Post
d.stp
post
Post #11





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Dobra, ale to i tak nie działa
[JAVASCRIPT] pobierz, plaintext
  1. function chat_send() {
  2.  
  3. var aktualnyCzas = new Date().getTime();
  4.  
  5. if (aktualnyCzas < 5000) {
  6. alert('Odczekaj');
  7. }
  8. else {
  9. var text = document.getElementById("chat_text").value;
  10.  
  11. $.post('./chat.php', {stage:"send", text:text}, function(data){
  12. document.getElementById("chat_text").value = '';
  13. chat_load();
  14. });
  15.  
  16. }
  17.  
  18. }
[JAVASCRIPT] pobierz, plaintext

Nie wyskakuje alert, wiadomość się wysyła

Ten post edytował d.stp 24.09.2012, 11:54:56
Go to the top of the page
+Quote Post
ArekJ
post
Post #12





Grupa: Zarejestrowani
Postów: 266
Pomógł: 9
Dołączył: 21.05.2008
Skąd: Łomianki

Ostrzeżenie: (0%)
-----


[JAVASCRIPT] pobierz, plaintext
  1. if (aktualnyCzas < 5000) {
[JAVASCRIPT] pobierz, plaintext

zamień na
[JAVASCRIPT] pobierz, plaintext
  1. if (aktualnyCzas < aktualnyCzas + 5000) {
[JAVASCRIPT] pobierz, plaintext

Czy jak tam w JS się wykonuje obliczenia na liczbach i zmiennych.
W każdym razie to błąd logiczny (IMG:style_emoticons/default/tongue.gif)

Ten post edytował ArekJ 24.09.2012, 12:13:39
Go to the top of the page
+Quote Post
d.stp
post
Post #13





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Teraz nie mogę wysłać wiadomości bo za każdym razem wyskakuje alert (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
markonix
post
Post #14





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Cytat(d.stp @ 24.09.2012, 13:49:32 ) *
Teraz nie mogę wysłać wiadomości bo za każdym razem wyskakuje alert (IMG:style_emoticons/default/smile.gif)

A znasz coś takiego jak pojęcie debugowania + samodzielności?

Warunek jest po prostu źle skontrowany więc co problem na niego popatrzeć i poprawić zamiast lecieć z tym na forum.

W skrócie powinien sprawdzać czy różnica między aktualnym czasem unix, a czasem wysłania ostatniej wiadomości jest mniejsza od określonej wartości. Pogrubione przerób na konkretne zmienne i symbole i masz skrypt.
Go to the top of the page
+Quote Post
d.stp
post
Post #15





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


... nie wiem naprawdę jak to zrobić
[JAVASCRIPT] pobierz, plaintext
  1. function chat_send() {
  2.  
  3. var d = new Date();
  4. var czas_aktualny =d.getTime();
  5.  
  6. var czas_wyslania_ostatniej_wiadomosci = 0;
  7.  
  8. if (czas_aktualny < czas_wyslania_ostatniej_wiadomosci) {
  9. alert('Odczekaj');
  10. }
  11. else {
  12. var text = document.getElementById("chat_text").value;
  13.  
  14. $.post('./chat.php', {stage:"send", text:text}, function(data){
  15. czas_wyslania_ostatniej_wiadomosci = czas_aktualny + 5000;
  16. document.getElementById("chat_text").value = '';
  17. chat_load();
  18. });
  19. }
  20.  
  21. }
[JAVASCRIPT] pobierz, plaintext


heh, wystarczyło przenieść ustawienie zmiennej poza funkcje (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
melkorm
post
Post #16





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


1. Każde odpalenie funkcji chat_send ustawia zmienne na nowo, więc w takiej postaci jak to teraz jest zrobione - nigdy nie zadziała.
2. W Twoim przykładzie pierwszy warunek NIGDY nie przejdzie, z oczywistych powodów mam nadzieję.
3. Wywal definicję zmiennej czas_wyslania_ostatniej_wiadomosci nad funkcję.
4. Przy wysyłaniu nie dodawaj tych 5 sekund, rób to w pierwszym warunku.
5. W pierwszym warunku dodaj lub czas_wyslania_ostatniej_wiadomosci równy jest zero.

Jeżeli wykonasz te wszystkie punkty to wydaje mi się że powinno działać, jeżeli nie to na pewno będzie bardziej poprawne niż jest to teraz.
Go to the top of the page
+Quote Post
d.stp
post
Post #17





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Dzięki za odp. ale sam na to wpadłem (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 16:13