Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z refresh
Forum PHP.pl > Forum > Po stronie przeglądarki
plcm
witam, mam zrobiona wyszukiwarke w ajaxie, wiadomo dziala w ten sposob ze wyszukuje bez przeladowania strony. W kolumnach ktore sie pojawiaja sa rozne dane, w jednej z kolumn wyswietlam liczbe ktora jest ta sama dla wszystkich rekordow z tym ze liczba jest zalezna od tego ile osob kliknie w link, chcialem zeby liczba sie odswiezala ustawilem odswiezanie na 10s i mam taki problem ze liczba odswieza sie tylko w pierwszym wierszu a w pozostalych pozostaje taka sama a chodzilo mi o to zeby sie odswiezala cala kolumna, zeby dzialalo w ten sposob ze jezeli w wyniku wyszukiwania zostana wyswietlone 4 rekordy to po 10 sekundach przy kazdym znim odswiezy sie liczba bo teraz odswieza sie tylko przy pierwszym, czy jest na to jakies rozwiazanie ?

W ten sposob wyswietlam rekordy
search.php
  1. .....
  2. <?php
  3. echo "<h2>Search Result</h2>";
  4. echo "<table border='0' id='content' cellspacing='0' cellpadding='0'>
  5. <tr bgcolor='#FFFFCC'>
  6. <th>Firstname</th>
  7. <th>Lastname</th>
  8. <th>Age</th>
  9. <th>Hometown</th>
  10. <th>Job</th>
  11. <div id='ile'><th>ile</th></div>
  12. </tr>";
  13. while ($row = mysql_fetch_assoc($rsd))
  14. {
  15.  
  16. echo "<tr class='each_rec'>";
  17. echo "<td>" . $row['FirstName'] . "</td>";
  18. echo "<td>" . $row['LastName'] . "</td>";
  19. echo "<td>" . $row['Age'] . "</td>";
  20. echo "<td>" . $row['Hometown'] . "</td>";
  21. echo "<td>" . $row['Job'] . "</td>";
  22. echo "<td>" ?>
  23. <div id="content1"><? include ('cyfra.php');?></div>
  24. <?
  25. echo "<td>";
  26. echo "</tr>";
  27. }
  28. echo "</table>";
  29.  


w ten sposob odswiezam
index.php
  1. .....
  2. <script type="text/javascript">
  3. var refreshId = setInterval(function()
  4. {
  5. $('#content1').load('cyfra.php');
  6. }, 10000);
  7.  


a ty jest plik cyfra.php
  1. .....
  2. $ilosc = mysql_fetch_array(mysql_query("SELECT COUNT(id) FROM testplace"));
  3.  
  4. echo("juz: ".$ilosc[0]);
  5.  
  6. ?>
pczeglik
Być może się pomylę, ale jednym z kilku problemów jest to że w pętli dodajesz sobie coś takiego jak <div id='content1''></div>. Niech search zwróci np 10 rekordów, które mają początkowo wartość 1 w tym miejscu zwróconą przez cyfra.php. Problem jest taki, że: ID musi być unikalne w skali całego htmla, tak że kod na pewno Ci się nie będzie walidował jeżeli będzie więcej zwróconych rekordów niż jeden. Natomiast jeżeli jest te przykładowe 10 rekordów to jQuery aktualizuje Ci pierwszy napotkany identyfikator, bo po znalezieniu pierwszego nie szuka już innych wystąpień id="content1" ponieważ specyfikacja w3c tego nie dopuszcza :-)

P.S. Nie wyobrażam sobie jak to może Ci działać, nawet jak rozwiążesz ten problem z identyfikatorem.

Pozdrawiam :-)
mortus
Cytat(pczeglik @ 20.05.2012, 13:12:13 ) *
Natomiast jeżeli jest te przykładowe 10 rekordów to jQuery aktualizuje Ci pierwszy napotkany identyfikator, bo po znalezieniu pierwszego nie szuka już innych wystąpień id="content1" ponieważ specyfikacja w3c tego nie dopuszcza :-)
Działa to troszkę inaczej. jQuery odnajdzie raczej ostatni element o danym identyfikatorze, bo nie chodzi o to, że nie wyszukuje kolejnych elementów o takim samym id, ale o to, że odnajduje tylko jeden taki element zastępując wcześniejsze.

Nie mniej to po części pomoże w rozwiązaniu problemu, jak to słusznie zauważyłeś.
plcm
ogolnie to wydaje mi sie ze nie dziala to dla tego ze przy odswiezeniu nie wykonuje sie ponownie cala petla i jquery nie wie ile razy wystepuje rekord na stronie, po za tym w kodzie widac ze div nie znajduje sie w petli bo ja przerwalem zeby wstawic diva ogolnie myslalem zeby odswiezac to
<div id='ile'><th>ile</th></div> ale nie wiem co bym mial przypisac funkcji load
hubson87
Tak jak pisał pczeglik id powinno być unikalne tzn lepiej użyj tutaj klasy, którą spokojnie wykorzystasz jako zaczep w jQuery.
Spróbuj zamknąć swoją funkcje w dodatkowego eacha

np.

[JAVASCRIPT] pobierz, plaintext
  1. $('.nazwa-klasy').each(function(){
  2. //tu Twój kod
  3. })
[JAVASCRIPT] pobierz, plaintext


P.S.oczywiście tego each umieść wewnątrz setInterval żeby Ci dla każdego elementu nie czekał
plcm
zaznacze ze nie wiem a nawet jestem pewny ze cos zle zrobilem bo nie dziala, zrobilem tak :
to
  1. <div id="content1"><? include ('cyfra.php');?></div>


zamienilem w ten sposob

  1. <div id='content1' class="nazwa"><? include ('cyfra.php');?></div>


a to
  1. <script type="text/javascript">
  2. var refreshId = setInterval(function()
  3. {
  4. $('#content1').load('cyfra.php');
  5. }, 10000);
  6.  


zamienilem na
  1. <script type="text/javascript">
  2. var refreshId = setInterval(function()
  3. {
  4. $('.nazwa').each(function(){
  5. $('#content1').load('cyfra.php');
  6. }}, 10000);
  7.  
hubson87
Zapomniałeś o nawiasie, a poza tym znowu odwołujesz się przez id.
Powinno być tak.

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. <script type="text/javascript">
  3. var refreshId = setInterval(function() {
  4. $('.nazwa').each(function(){
  5. $(this).load('cyfra.php');
  6. })}, 10000);
  7. </script>
[JAVASCRIPT] pobierz, plaintext


Btw zainstaluj sobie firebuga czy coś to będziesz widział błędy w js'ach


plcm
super, dziala, tylko smiesznie to wyglada ja jest np 30 wynikow i po kolei przeskakuje kazda liczba myslalem ze wszystkie naraz sie zmienia
hubson87
W sumie bez sensu 30 razy wykonywać to samo zapytanie
Zamień ten skrypt na taką postać.

[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. var refreshId = setInterval(function()
  3. {
  4. $.get('cyfra.php', function(data) {
  5. $('.nazwa').each(function(){
  6. $(this).html(data);
  7. });
  8. });
  9. }, 10000);
  10. </script>
[JAVASCRIPT] pobierz, plaintext


plcm
zmienilem i powiem Ci ze dziala, ale tak samo jak poprzednio ale najwazniejsze ze dziala biggrin.gif dzieki
pczeglik
Cytat(mortus @ 20.05.2012, 13:22:34 ) *
Działa to troszkę inaczej. jQuery odnajdzie raczej ostatni element o danym identyfikatorze, bo nie chodzi o to, że nie wyszukuje kolejnych elementów o takim samym id, ale o to, że odnajduje tylko jeden taki element zastępując wcześniejsze.

Nie mniej to po części pomoże w rozwiązaniu problemu, jak to słusznie zauważyłeś.


Żeby się utwierdzić w moim zdaniu, zrobiłem szybki test. Zerknij proszę tutaj: jsFiddle - pobieranie id (jQuery).
Wynika z tego, że mam rację. Zwrócona jest wartość pierwszego znalezionego elementu.

P.S. Dalsze przeszukiwanie DOM było by nieoptymalne, dlatego kończy się po pierwszym wystąpieniu.

Pozdrawiam.
plcm
Pozwole sobie jeszcze pociagnac ten temat poniewaz natrafilem na maly problem wszystko dzialalo dopoki w pliku cyfra nie zmieniliem lini

  1. $ilosc = mysql_fetch_array(mysql_query("SELECT COUNT(id) FROM testplace"));


na


  1. $id_p=$row['id_p'];
  2.  
  3. $ilosc16 = mysql_fetch_array(mysql_query("SELECT COUNT(id) FROM testplace WHERE godzina='160000' and id_place='$id_p'"));


plik search.php wyglada teraz tak :
  1. while ($row = mysql_fetch_assoc($rsd))
  2. {
  3.  
  4. echo "<tr class='each_rec'>";
  5. echo "<td>" . $row['id_p'] . "</td>";
  6. echo "<td>" . $row['nazwa'] . "</td>";
  7. echo "<td>" . $row['adres'] . "</td>";
  8.  
  9. ?>
  10. <td><a href="get16.php?action=delete&id=<? echo $row['id_p'];?>" class="delete"><button type="submit" name="wprowadz1" class="submitButton">16:00</button></a></td>
  11. <td><div class="nazwa"><? include ('cyfra.php');?></div></td>
  12.  
  13. <?
  14.  
  15.  
  16. echo "</tr>";
  17. }
  18. echo "</table>";


odswiezam w ten sposob
  1. <script type="text/javascript">
  2. var refreshId = setInterval(function()
  3. {
  4. $.get('cyfra.php', function(data) {
  5. $('.nazwa').each(function(){
  6. $(this).html(data);
  7. });
  8. });
  9. }, 10000);
  10. </script>


czyli dziala to w ten sposob ze plik cyfra liczy ile jest id dla id obok ktorego sie znajduje, przy zaladowaniu strony pojawia sie cyfra 1 czyli jest ok ale przy odswiezeniu jest cyfra 0 i tak zostaje wiem ze dzieje sie tak dla tego ze przy pierwszym zaladowaniu strony jest dostarczana informacja o $row['id_p'] a przy odswiezeniu tej info juz nie ma. Nie wiem w jaki sposob to rozwiazac tak aby id ktore jest pobierane przy zaladowaniu strony zostawalo w pliku cyfra. Czy ma ktos jakis pomysl?
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.