Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][AJAX] Load i porównanie
Forum PHP.pl > Forum > Przedszkole
in5ane
Witam. Mam coś takiego:
[JAVASCRIPT] pobierz, plaintext
  1. setInterval("$('#sb').load('index.php #sb')", 5000);
[JAVASCRIPT] pobierz, plaintext

I moje pytanie brzmi, jak mam stworzyć IF'a jakiegoś, żeby sprawdzało, czy po załadowaniu na nowo tego DIV'a (#sb) (co 5 sekund ładuje), coś się zmieniło. Jeżeli się coś zmieniło, to coś skrypt ma wykonać (to już sobie dopiszę), a jeżeli nie, to nic.
Proszę o pomoc.
Rid
Można by tutaj spróbować porównać rozmiar index.php,najprostszy sposób,nie jest to jednak w 100% skuteczne.
in5ane
Tzn. np. jak?
Rid
Przy wejściu na stronę zapisuje Pan w bazie danych rozmiar pliku filesize($index.php) do bazy danych
i sprawdza pan po interwale rozmiar z tym co jest zapisany w bazie,jednakże jak napisałem nie jest to skuteczne w odniesieniu do diva.Przykład:
<div>ala</div>
<div>ale</div>
dwa różne słowa ,ale rozmiar pliku pozostanie niezmieniony.Jeśli ktoś wpisze
<div>hale</div> rozmiar pliku już się zmieni.
Może ktoś ,zna lepsze rozwiązanie?questionmark.gif?
in5ane
A nie ma innej mozliwosci? Bo chodzi o to, ze mam shoutbox i odwieza mi Diva, co te 5 sekund i jak jest nowa wiadomosc to ja pokazuje. A chcialbym zrobic, ze jak jest nowa wiadomosc, to bedzie dzwiek. Prosze o pomoc.

Chyba, że macie inny pomysł na odświeżanie. Może znacie jakiś sposób, że odświeży mi tego DIV'a tylko wtedy, gdy jest nowa wiadomość.
Fifi209
To nie żaden .load a getJSON i potem porównywanie tablic - tej z javascript, którą pobrałeś chwilę wcześniej z tą z php.

W ogóle nie wystarczy Ci jeden temat? Musisz dwa zakładać?
http://forum.php.pl/index.php?showtopic=171226
in5ane
Ja nie założyłem tamtego tematu, tylko nospor przeniósł posty z innego (gdzie zadałem jedno pytanie) i utworzył nowy temat.

@nospor: zdejmij mi ten procent, nie zakładałem specjalnie nowego tematu.


@topic: jak to nie load? ja właśnie poprzez load, który wykonuje się co 5 sekund zmieniam zawartość DIV.

W tym DIVie mam zwykłe zapytanie do bazy, pętlę while, która w tabelce wyświetla wiadomości. Więc w jaki sposób mogę porównywać?
nospor
Cytat
Ja nie założyłem tamtego tematu, tylko nospor przeniósł posty z innego (gdzie zadałem jedno pytanie) i utworzył nowy temat.
Zapytałeś o to samo w innym temacie. To też jest crossposting. Czy bym wydzielił Twoj post czy nie to nadal twój problem by był rozważany w dwóch wątkach - to jest crossposting i to jest na forum zabronione
in5ane
Wracając do tematu, mam dokładnie tak:

w sekcji head:
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">setInterval("$('#sb').load('index.php #sb')", 5000);</javascript>
[JAVASCRIPT] pobierz, plaintext


w sekcji body:
  1. <div id="sb">
  2. <?php
  3. $query = "SELECT * FROM shoutbox ORDER BY time DESC";
  4. while($row = mysql_fetch_array($query)) {
  5. $row['msg'].'<br />';
  6. }
  7. ?>
  8. </div>


I teraz dokładnie widać, jak to działa u mnie. Czyli po prostu Ajax (jQuery w moim przypadku) odświeża po prostu tego DIV'a. I teraz moje pytanie właśnie. Jak mogę zrobić, żeby np. pod tym load był jakiś if(stara tresc != nowa tresc) to daj dźwięk.

Proszę o pomoc.
nospor
Cytat
Jak mogę zrobić, żeby np. pod tym load był jakiś if(stara tresc != nowa tresc) to daj dźwięk.

LOAD ma callback do którego jest przekazywana Twoja treść. zapamiętuj więc tę treść w zmiennej js i sobie sprawdzaj czy tresc aktualnie dostana jest różna od tresci zapamietaj w zmiennej js. Jak tak to wal dźwięk
everth
W jQuery w ajax jest też opcja ifModified - jeśli masz ustalone prawidłowe nagłówki odpowiedzi to żądanie nie powinno nic zwracać jeśli odpowiedź nie zmieniła się od ostatniego razu.
in5ane
Które będzie prostsze? To callback czy ifModified? Mógłbym poprosić o jakieś przykłady? Bo co do callbacku jest tyle, co nic w dokumentacji ;/
everth
Szczerze mówiąc to nie wiem jak odpowiedzieć. Dla mnie sensowniejsze wydaje się bazowanie na nagłówkach (ETag, If-Modified-Since) bo ogranicza ilość przesyłanych danych (zwłaszcza tu gdy połączenia są nawiązywane regularnie), ale jak pytasz o to czym są callbacki to może zostań przy rozwiązaniu nospora.

Callback jest funkcją którą przekazujesz metodzie jQuery, uruchamia się ona po wykonaniu właściwego kodu metody lub w reakcji na określone zdarzenie (zazwyczaj, może są jeszcze inne zastosowania). Przykładów masz od groma - poszukaj.
in5ane
Cześć, mam problem, otóż w PHP (już w sekcji body) chce wywołać pewną rzecz i nie działa mi. Np. to działa: <input type="button" onclick="klik()" value="ok" />, jak kliknę, to śmiga, ale jak zrobiłem tak: <script type="text/javascript">klik();</script> to nie działa. Może ktoś pomóc?
kokers
heh...
a co niby wywołuje tego klika w <script .... ></script> ?

bo to, że kliknięcie w button powoduje wywołanie klika to wiadomo. a to drugie? kto/co jest tym wywoływaczem?
in5ane
To klik(); jest w DIVie, który jest odświeżany, co pewien czas i gdy zostanie odświeżone, to powinno zostać wywołane, więc dlaczego się nie wywołuje?
Fifi209
Odświeżany jest AJAX'em? Jeżeli tak to nic dziwnego.
in5ane
Dlaczego dziwne? Poproszę o pomoc.
kokers
poczytaj o wykonywaniu funkcji onSuccess czy temu tam podobne.

w ostateczności o setinterval
in5ane
Kombinuję, ale nie wychodzi mi, nie wiem dokładnie, gdzie, co mam umieścić.

Mój kod:
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. setInterval("$('#sb_sb').load('index.php #sb_sb')", 1000);
  3. function klik() {
  4. $('#sb').load('index.php #sb');
  5. }
  6. </script>
[JAVASCRIPT] pobierz, plaintext

i sekcji body:
  1. echo '<div id="sb_sb">';
  2. $query_m = mysql_query("SELECT (data) FROM shoutbox ORDER BY data DESC LIMIT 1");
  3. $row_m = mysql_fetch_array($query_m);
  4. if($_COOKIE['lastmsg'] != $row_m['data']) {
  5. echo '<script type="text/javascript">klik();</script>';
  6. }
  7. echo '</div>';


Proszę o jakąś pomoc. Męczę się już z tym drugi dzień.

A może macie inny pomysł, żeby się wykonał kod z funkcji klik? Chodzi o to, że tylko wtedy gdy to ciasteczko będzie nierówne danej z MySQL.
Fifi209
Cytat(in5ane @ 28.02.2011, 22:48:36 ) *
Dlaczego dziwne? Poproszę o pomoc.

Bo wczytana AJAX'em treść "nie widzi" reszty drzewa DOM z tego co pamiętam.

jQuery.live() <- poszukaj, może pomoże
wNogachSpisz
Jeśli użyjesz funkcji jQuuery $.get czy $.post czy $.ajax, to pobrany kod się bez problemu wykona.
Mówie o kodzie javascript między znacznikami <script>
in5ane
No czytam o tym jQuery.get() no i mam taki przykład dajmy na to:
$.get("test.php", function(data){
alert("Data Loaded: " + data);
});

No i jak ja mam to wklepać do swojego kodu? Nie mogę to pojąć, kombinuję na różne sposoby, ale nie wychodzi.

Czytam również o tym .live(), wiem do czego ma służyć, ale jak mam to wcisnąć w swój program to nie wiem, no bo u mnie te funkcje klik(); ma uruchomić tyko wtedy jeżeli to ciasteczko jest nie równe danej z bazy MySQL.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.