Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][AJAX][PHP]Chat, odświeżanie nie wywołuje się.
Forum PHP.pl > Forum > Przedszkole
jarek998
Cześć wszystkim, mam problem przy tworzeniu chatu.

chat_process - skrypt ten powinien wyciągać z bazy, napisaną wiadomość.
  1.  
  2. $sprawdz = $pdo->prepare("SELECT * FROM czat WHERE pokoj=:room ORDER BY id DESC LIMIT 50");
  3.  
  4. $sprawdz->bindValue(":room", $_POST['room'], PDO::PARAM_INT);
  5.  
  6. $sprawdz->execute();
  7.  
  8.  
  9. if(isset($_POST['function'])) {
  10.  
  11.  
  12. while($txt = $sprawdz->fetch()){
  13.  
  14. $text['tresc'] = $text['tresc']."<tr> <td class='user'><a href=gracze.php?id=".$txt['gracz_id'].">".$txt['gracz']."</a> (".$txt['data'].")</td><td class='mess'>".bbcode($txt['txt'])."</td></tr>";
  15.  
  16. }$return['text'] = $text;
  17.  
  18. echo json_encode($return);
  19.  
  20.  
  21. }
  22.  


czat.php - Ten fragment jest potrzebny aby to funkcjonowało
  1. <script>
  2. var room = '<?php echo $_GET['id']; ?>'
  3. function refresh(){
  4. $.ajax({
  5. type:"POST",
  6. url:"chat_process.php",
  7. data:{
  8. 'function':'refresh',
  9. 'room':room,
  10. },
  11. dataType:"json",
  12. success:function(data){
  13. $('#posts').prepend(data.text['tresc']);
  14.  
  15. },
  16. });
  17. }
  18. refresh();
  19. setInterval('refresh()', 5000);
  20. </script>
  21.  


Nie mogę znaleźć rozwiązania, oczywiście połączenie z bazą jest.
shx420
Zamiast

  1. setInterval('refresh()', 5000);


Wpisz

  1. setInterval(refresh, 5000);


I powinno być ok.
olszam
Kod
setInterval('refresh()', 5000);
tych kresek nie powinieneś wywalić? sry zapomniałem ich nazwy sad.gif
nospor
A co wyscie sie tych apostrofow uczepili? Tam wszystko jest ok.
@shx420 i nie, nie zasluzyles na pomogl bo obie formy sa poprawne i twoj post nie przyczynil sie w zaden sposob do rozwiazania problemu


@jarek998 a ty moglbys sie wysilic troche i napisac w czym dokladnie jest problem... Patrzyles w ogole w konsole FireBug co zwraca twoj ajax?
jarek998
Tak patrzałem, zwraca puste pole HTML, myślałem że coś z pętlą jest nie tak, bo gdy wpiszę puste dajmy "Tekst" to co 5 sec będzie się pojawiać tekst.

W Edit jest wszystko dobrze, room:1 jeśli jestem na czat.php?id=1 itd.

w JSON jest wpisane text null

Html : {"text":null}


Cytat(shx420 @ 5.11.2015, 00:21:55 ) *
Zamiast

  1. setInterval('refresh()', 5000);


Wpisz

  1. setInterval(refresh, 5000);


I powinno być ok.


W tedy funkcja nie wywołuje się.
MeGusta
Czasem nie powinno być tak:

  1.  
  2. $sprawdz = $pdo->prepare("SELECT * FROM czat WHERE pokoj=:room ORDER BY id DESC LIMIT 50");
  3.  
  4. $sprawdz->bindValue(":room", $_POST['room'], PDO::PARAM_INT);
  5.  
  6. $sprawdz->execute();
  7.  
  8.  
  9. if(isset($_POST['function'])) {
  10.  
  11.  
  12. while($txt = $sprawdz->fetch()){
  13.  
  14. $text['tresc'] = $text['tresc']."<tr> <td class='user'><a href=gracze.php?id=".$txt['gracz_id'].">".$txt['gracz']."</a> (".$txt['data'].")</td><td class='mess'>".bbcode($txt['txt'])."</td></tr>";
  15.  
  16. }
  17.  
  18. $return = $text['tresc'];
  19.  
  20. echo json_encode($return);
  21.  
  22.  
  23. }
  24.  


Oraz musisz ajaxem wysłać dane do zmiennej z javascript w ten sposób:

  1. var room;
  2. $.ajax({
  3. type: 'POST',
  4. url: 'plik.php',
  5. success: function(data) {
  6. room = JSON.parse(data);
  7. },
  8. });
  9.  
  10. function refresh(){
  11. $.ajax({
  12. type:"POST",
  13. url:"chat_process.php",
  14. data:{
  15. 'function':'refresh',
  16. 'room':room,
  17. },
  18. dataType:"json",
  19. success:function(data){
  20. $('#posts').prepend(data.text['tresc']);
  21.  
  22. },
  23. });
  24. }
  25. refresh();
  26. setInterval(refresh();, 5000);
olszam
Cytat
Tak patrzałem, zwraca puste pole HTML, myślałem że coś z pętlą jest nie tak, bo gdy wpiszę puste dajmy "Tekst" to co 5 sec będzie się pojawiać tekst.


a gdzieś kod sprawdza czy po 5 sekundach nie dodaje tych samych danych z mysqla? Albo czyścisz boxa i dodajesz jeszcze raz wszytko co zwróci ci zapytanie albo porównujesz z tym co jest wpisane i dodajesz to co nie zostało wpisane w odpowiedniej kolejności a powyżej 50 wpisów powinny być kasowane.
Comandeer
Cytat
A co wyscie sie tych apostrofow uczepili? Tam wszystko jest ok.

Kinda sorta. Owszem, jest to dopuszczalne, ale wysoce niezalecane: http://bonsaiden.github.io/JavaScript-Gard...rzystanie-eval-

Co do tematu: jesteś pewien, że baza poprawnie wykonuje zapytanie? Bo wygląda jakby zwracała pusty wynik
nospor
Cytat
Kinda sorta. Owszem, jest to dopuszczalne, ale wysoce niezalecane:
Wiem, ale oni tutaj uzyli tego w kontekscie, ze niby przez to nie dziala, co oczywiscie jest nieprawda.
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.