Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odswiezenie strony bez "mrugniecia" nie dziala
Forum PHP.pl > Forum > XML, AJAX
arogant
Witam.
Robie taką jakby księge gości z odświeżaniem AJAX (podobno)
Na dwóch komputerach odpaliłem ta strone i komputer, ktory wysylal wpis odswiezal strone, ale "odbiorca" mial tak jak chce (czyli sie nie odswieza)

Ten skrypt jest z neta ale go troche zmienilem pod siebie
Kod
    <script src="jquery-1.10.2.min.js"></script>
    <script>
        function check(){
            $.ajax({
                type: 'POST',
                url: 'checker.php',
                dataType: 'json',
                data: {
                    counter:$('#message-list').data('counter')
                }
            }).done(function( response ) {
                $('#message-list').data('counter',response.current);
                if(response.update==true){
                    $('#message-list').html(response.news);
                    $("html, body").animate({  scrollTop:1000 }, 700);
                }
            });
        }
        setInterval(check,2000);
    </script>
    <div id="message-list" data-counter="<?php echo (int)$db->check_changes();?>">
        <?php echo $db->get_news();?>
    </div>
    <form action="" method="post">
    <input name="title" placeholder="Twoj wpis... (MAX 1024 znaków)" maxlength="1024" />
    <input type="submit" value="Wyślij!" />
    </form>


Naprowadzi / pomoze ktoś?

pozdrawiam Arogant
pawlo896
  1. var myVar = setInterval(function(){ myTimer() }, 3000);
  2.  
  3. function myTimer() {
  4. $("#div").load('plik z php');
  5. }


Może pomoże, ponieważ widzę, że trochę źle korzystasz z setInterval.
viking
To też nie jest najlepsze. Jeśli serwer będzie zwracał odpowiedź dłużej niż 3s nic się nie wyświetli a już kolejne żądanie poleci.
pawlo896
To wtedy trzeba mieć tandetny serwer/hosting lub ściągać całą bazę.
Do tej pory bez problemu się sprawdza u mnie w grze.
kapslokk
Cytat(pawlo896 @ 11.03.2016, 10:24:00 ) *
To wtedy trzeba mieć tandetny serwer/hosting lub ściągać całą bazę.

Lub mieć po prostu chwilowego laga.
koodo218
Tak czy siak wystarczy if ze sprawdzaniem czy żądanie zwróciło odpowiedni status i wtedy podmieniać.
arogant
ok dobra dobra już wszystko działa ALE pojawił się kolejny problem..

Zrobiłem funkcje w PHP która pobiera wartość rangi z bazy sql a następnie zamienia ją na kolor i cień nicku no ale przez tą funkcje nie odswieza mi się div..


Tu jest funkcja:
Kod
$dbq->query("DELETE FROM news WHERE add_date < SUBTIME(NOW(),'0:10:0')");
                        $nick = "SennyK";
                        $a=$dbq->query("SELECT * FROM users WHERE nick='$nick'");
                        while($user=$a->fetch_assoc()){
                            $staff = $user['staff'];
                            function getStaff($staff){
                                switch($staff){
                                    case 0: return "color=\"grey\" style=\"text-shadow:0 0 0px grey;\""; break;
                                    case 1: return "color=\"blue\" style=\"text-shadow:0 0 6px blue;\""; break;
                                    case 2: return "color=\"#A67D3D\" style=\"text-shadow:0 0 6px #A67D3D;\""; break;
                                    case 3: return "color=\"#E47833\" style=\"text-shadow:0 0 6px #E47833; background: url(assets/img/stars/orange.gif);\""; break;
                                    case 4: return "color=\"#006600\" style=\"text-shadow:0 0 6px green; background: url(assets/img/stars/lgreen.gif);\""; break;
                                    case 5: return "color=\"#FF3333\" style=\"text-shadow:0 0 6px #FF0000; background: url(assets/img/stars/red.gif);\""; break;
                                }
                            }


no a tu funkcja, któa pobiera tekst z SQL i formatuje jego wyświetlanie:
Kod
    function get_news(){
        if($result = $this->db->query('SELECT * FROM news WHERE id<>1 ORDER BY add_date DESC LIMIT 100')){
            $return = '';
            while($r = $result->fetch_object()){
                $nick = "SennyK";
                        $a=$this->db->query("SELECT * FROM users WHERE nick='$nick'");
                        while($user=$a->fetch_assoc()){
                            $staff = $user['staff'];
                            
                            $font = getStaff($staff);
                $return .= '<p><img style="margin: 5px 5px 5px 5px;" id="avatar" src="assets/img/'.$user['avatar'].'" height="50" /><font '.$font.'><strong>'.$user['nick'].'</strong></font> | '.htmlspecialchars($r->title).'</p>';
                $return .= '<hr/>';
            }}
            return $return;
        }
    }


jeśli usune linijke $font = getStaff($staff); z drugiej funkcji to normalnie mi się wszystko odświeża, ale jeśli jest to musze ręcznie odświeżać (F5)

Wie może ktoś w czym jest problem? Coś tak myśle, że funkcja jest nie tak napisana lub coś takiego...

Każda pomoc mile widziana smile.gif
nospor
Nie przyszlo ci do glowy,ze np getStaff($staff); generuje blad i poprostu AJAX ci sie zle wykonuje? SPrawdz co dostajesz w swoim AJAX a bedzie wszystko jasne
arogant
przyszło mi to do głowy dlatego napisałem, że jeśli to usunę to działa..

wiem co dostaje w AJAX i wszystko działa oprócz tego odświeżania diva
nospor
Ale miales sprawdzic blad jaki dokladnie dostajesz.... bo pewnie dostajesz.
arogant
po zakomendowaniu tej lini:
Notice: Undefined variable: font in db.php on line 98

Edit:

po zrobieniu getStaff(); mam błąd:
Notice: Undefined variable: staff in ewa.php on line 69
nospor
Undefined variable: staff in ewa.php on line 69
popraw
arogant
Kod
67. function getStaff($staff){
68. switch($staff){
69. case 0: return "color=\"grey\" style=\"text-shadow:0 0 0px grey;\""; break;


co tu mam zmienić? jak to się pobiera z bazy danych?

Kod
<?php
                        $dbq->query("DELETE FROM news WHERE add_date < SUBTIME(NOW(),'0:10:0')");
                        $nick = "SennyK";
                        $a=$dbq->query("SELECT * FROM users WHERE nick='$nick'");
                        while($user=$a->fetch_assoc()){
                            $staff = $user['staff'];
                            function getStaff($staff){
                                switch($staff){
                                    case 0: return "color=\"grey\" style=\"text-shadow:0 0 0px grey;\""; break;
                                    case 1: return "color=\"blue\" style=\"text-shadow:0 0 6px blue;\""; break;
                                    case 2: return "color=\"#A67D3D\" style=\"text-shadow:0 0 6px #A67D3D;\""; break;
                                    case 3: return "color=\"#E47833\" style=\"text-shadow:0 0 6px #E47833; background: url(assets/img/stars/orange.gif);\""; break;
                                    case 4: return "color=\"#006600\" style=\"text-shadow:0 0 6px green; background: url(assets/img/stars/lgreen.gif);\""; break;
                                    case 5: return "color=\"#FF3333\" style=\"text-shadow:0 0 6px #FF0000; background: url(assets/img/stars/red.gif);\""; break;
                                }
                            }
                            ?>


dobra zrobiłem to tak bo chyba nikt mi nie pomoże..

Kod
// $font = getStaff();
                            switch($staff){
                                    case 0: $font = "color=\"grey\" style=\"text-shadow:0 0 0px grey;\""; break;
                                    case 1: $font = "color=\"blue\" style=\"text-shadow:0 0 6px blue;\""; break;
                                    case 2: $font = "color=\"#A67D3D\" style=\"text-shadow:0 0 6px #A67D3D;\""; break;
                                    case 3: $font = "color=\"#E47833\" style=\"text-shadow:0 0 6px #E47833; background: url(assets/img/stars/orange.gif);\""; break;
                                    case 4: $font = "color=\"#006600\" style=\"text-shadow:0 0 6px green; background: url(assets/img/stars/lgreen.gif);\""; break;
                                    case 5: $font = "color=\"#FF3333\" style=\"text-shadow:0 0 6px #FF0000; background: url(assets/img/stars/red.gif);\""; break;
                                }
                $return .= '<p><img style="margin: 5px 5px 5px 5px;" id="avatar" src="assets/img/'.$user['avatar'].'" height="50" /><font '.$font.'><strong>'.$user['nick'].'</strong></font> | '.htmlspecialchars($r->title).'</p>';
                $return .= '<hr/>';


bez zadnej funkcji
nospor
Cytat
dobra zrobiłem to tak bo chyba nikt mi nie pomoże..

1) Nikt tu nie siedzi i nie sprawdza forum co minute by tylko po dwoch minutach od twojego pytania leciec i ci odpowiadac. Naucz sie troche cierpliwosci i nie wyjezdzaj po 15 minutach od zadania pytania z takim tekstem :/

2) Pomoc dostales, wskazalem ci gdzie masz blad, wiec nie pisze ze nikt cie nie pomaga

3) Zas co do tego konretnego bledu to odnosze wrazenie ze w swojej funkcji nie podales parametru $staff w definicji
arogant
podałem w mojej funkcji definicje $staff... poradziłem sobie więc można zamknąć
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-2024 Invision Power Services, Inc.