Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z refresh
plcm
post 19.05.2012, 16:15:20
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 7.12.2010

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


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. ?>


Ten post edytował plcm 19.05.2012, 16:24:34
Go to the top of the page
+Quote Post
pczeglik
post 20.05.2012, 12:12:13
Post #2





Grupa: Zarejestrowani
Postów: 10
Pomógł: 1
Dołączył: 14.05.2012

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


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 :-)
Go to the top of the page
+Quote Post
mortus
post 20.05.2012, 12:22:34
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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ś.
Go to the top of the page
+Quote Post
plcm
post 20.05.2012, 13:01:38
Post #4





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 7.12.2010

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


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
Go to the top of the page
+Quote Post
hubson87
post 20.05.2012, 15:59:04
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 8
Dołączył: 9.02.2011
Skąd: Wrocław

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


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ł

Ten post edytował hubson87 20.05.2012, 16:04:33
Go to the top of the page
+Quote Post
plcm
post 20.05.2012, 18:20:21
Post #6





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 7.12.2010

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


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.  


Ten post edytował plcm 20.05.2012, 18:21:51
Go to the top of the page
+Quote Post
hubson87
post 20.05.2012, 19:24:32
Post #7





Grupa: Zarejestrowani
Postów: 83
Pomógł: 8
Dołączył: 9.02.2011
Skąd: Wrocław

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


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


Go to the top of the page
+Quote Post
plcm
post 20.05.2012, 19:31:10
Post #8





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 7.12.2010

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


super, dziala, tylko smiesznie to wyglada ja jest np 30 wynikow i po kolei przeskakuje kazda liczba myslalem ze wszystkie naraz sie zmienia
Go to the top of the page
+Quote Post
hubson87
post 20.05.2012, 19:54:36
Post #9





Grupa: Zarejestrowani
Postów: 83
Pomógł: 8
Dołączył: 9.02.2011
Skąd: Wrocław

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


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


Go to the top of the page
+Quote Post
plcm
post 20.05.2012, 20:08:48
Post #10





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 7.12.2010

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


zmienilem i powiem Ci ze dziala, ale tak samo jak poprzednio ale najwazniejsze ze dziala biggrin.gif dzieki
Go to the top of the page
+Quote Post
pczeglik
post 20.05.2012, 22:06:26
Post #11





Grupa: Zarejestrowani
Postów: 10
Pomógł: 1
Dołączył: 14.05.2012

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


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.
Go to the top of the page
+Quote Post
plcm
post 21.05.2012, 15:57:14
Post #12





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 7.12.2010

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


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?

Ten post edytował plcm 21.05.2012, 18:36:33
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 21.07.2025 - 07:26