Javascript odświeżanie kilku divów


(arekk-99) #1

Witam.

Nie jestem pewien, czy na dobrym forum ten temat umieściłem, ale zdaje mi się ze tak.

Mam następujący problem. Potrzebuje zrobić tak jakby taki mały czat na stronię, i potrzebuje odtworzyć dźwięk gdy przyjdzie nowa wiadomość. Czat jest w php, autoodświeżanie w j query, i niestety napotkałem pewien problem.

Miałem zamiar zrobić to w ten sposób, że oddzielny setInterval ustawiony został na funkcje aktualizuj, która sprawdza ile jest wiadomości w bazie, i osobny setInterval dla funkcji update, która sprawdza ile jest wiadomości w  bazie, porównuje to z poprzednim wynikiem i jeśli będzie ich więcej niż było poprzednio to odtworzy dźwięk. Niestety, Intervale tak jakby się blokują. Jak ustawie np. setInterval("updater();",1200); i setInterval("aktualizuj();",1000); to oba się wykonują co 1200 ms. Wiecie może co jest tego przyczyną?

oczywiście każdy interval jest ustawiany przed każdą funkcją, nie obok siebie.

Pozdrawiam i czekam na odpowiedź


(mikolaj_s) #2

setInterval pobiera jako pierwszy parametr funkcję do wywołania, więc podaj jej nazwę bez cudzysłowia i nawiasów. Sprawdź przykład:

html
head
script
function updater() {
 console.log("UPDATE");
}
function aktualizuj() {
 console.log("Aktualizuj");
}
/script
/head
body
script
setInterval(updater,1200); 
setInterval(aktualizuj,1000);

/script
/body
/html

A po drugie raczej nie ten dział. Szybciej ktoś by Ci odpowiedział w dziale webowym :wink:


(slepcu) #3

po pierwsze: 1200 i 1000 ms to naprawdę mała różnica czasu, może po prostu nie widzisz różnicy;

po drugie: pewnie odczytujesz dane z bazy po przez ajax. To masz czas reakcji nie zależy od tych timerów, zależy jak szybko odpowie serwer;

po trzecie: ajax i timery to ogólnie zły pomysł. Pod względem wydajności. Poczytaj sobie o websocketach i sprawdz czy twój serwer (hosting) to obsługuje. Wysłane poprzez websocket informacje są asynchronicze, nie będziesz musiał robić Interwałów - dostaniesz info o nowej wiadomości - zostanie wywołany wtedy odpowiedni event;

 

@mikolaj_s:

obydwie formy są poprawne i działają wszędzie.


(arekk-99) #4

nie, nie robię przez ajax?

robię przez php :smiley:

tak zawsze robiłem, ale nigdy nie miałem potrzeby do zrobienia czegoś tkaiego. Zauważam różnice, bo nawet jak ustawiłem jeden na 1000 ms a drugi na 2000 ms to i tak było co 2000 ms a nie co 1000 ms 1 a co 2000 ms drugi


(kostek135) #5

@OP

Powyższy kod od @mikolaj_s nie działa tak jak ty to opisujesz. Loguj sobie czas na konsole, wszystko jest dobrze.


(slepcu) #6

no to jak się odwołujesz z html do php ?


(mikolaj_s) #7

@arekk-99

To co opisałeś nie wystarcza, aby Ci pomóc. Nikt nie zgadnie w czym masz problem. Błąd nie tkwi w funkcji setInterval.