Avatar billede delphiuser Mester
16. august 2016 - 14:55 Der er 8 kommentarer og
1 løsning

Auto refresh div

Hej eksperter.
Jeg har lavet et lille feed system på en side jeg leger lidt med lige nu. og det hele virker fint. Bortset fra at jeg gerne vil have den skal refresh der hvor man skal kunne se den nyeste feed når der kommer en.

Jeg har prøvet mig lidt frem men kan ikke få den til at virke som jeg gerne vil.

her kommer min mgh_java.js fil.
function auto_load() {
    $.ajax({
        url: "controller/features.php",
        cache: false,
        success: function (data) {
            $("#feed").html(data);
        }
    });
}

$(document).ready(function(){
    auto_load();
});

setInterval(auto_load, 1000);

som i kan se prøver jeg at kalde en fil der hedder features.php som ligger i en mappe der hedder controller.
Jeg har en <span id="feed"></span> som er den jeg prøver at fange i mit script. Men intet sker. Jeg kan simpelt hen ikke gennemskue hvad jeg gør forkert.

Lige for en god ordens skyld får i lige mine php filer med også. Det er dem der bliver brugt for at få det til at køre.

features.php
<?php

class Features extends Database {
   
    function __construct() {
        parent::__construct();
    }
   
    function _feature() {
        $sql = "select * from features";
        $result = $this->_DBCONN->query($sql);
        if(mysqli_num_rows($result)>0) {
            while($row = $result->fetch_assoc()) {
                $title = $row['title'];
                $msg = $row['msg'];
                $picture = $row['picture'];
                if(empty($picture)) {
                    $picture = 'nopic.jpg';
                }
            }
        } else {
            $title = 'Velkommen';
            $msg = 'Dette er et ny cms system som skal kunne bruges til jobrelateret s&oslash;gning. Det er meningen at denne
            side skal fungere som en pr&aelig;sentation af dig.
            For at kunne f&aring; det til at fungere skal du linke til din side i dit, cv p&aring; jobnet.dk og alle andre job sider du
            m&aring;tte v&aelig;re p&aring;';
            $picture = 'nopic.jpg';
        }
        ?>
        <article id="feature">
    <span id="info">
        <h1><?php echo $title; ?></h1>
        <?php echo nl2br($msg); ?>
    </span>
            <img src="<?php echo ROOT_URL.IMG_UPL.$picture; ?>">
        </article>
        <figure id="floor">

        </figure>
        <?php
    }
   
    function _rssFeed() {
        $sql = "select * from feeds order by feed_id DESC limit 4";
        $result = $this->_DBCONN->query($sql);
        echo '<figure id="features">';
        if(mysqli_num_rows($result)>0) {
            echo '<span id="feed">
    <img src="'.ROOT_URL.IMG_ICO_SM.'rss.png" id="ico"><h3>Hvad siger andre!</h3><ul>';
            while($row = $result->fetch_assoc()) {
                $feed_id = $row['feed_id'];
                $name = $row['name'];
                $msg = $row['msg'];
                ?>
                <li><a href=""><h4><?php echo $name; ?></h4><p><?php echo $msg; ?></p></a></li>
                <?php
            }
            echo '</ul></span>';
        } else {
            echo '<span id="rss">
    <img src="'.ROOT_URL.IMG_ICO_SM.'rss.png" id="ico"><h3>Hvad siger andre!</h3>
    <p>Der er ikke nogen som siger noget vedr&oslash;rende denne siden endnu. Giv mig din mening og bliv den f&oslash;reste.</p>
    </span>';
        }
        ?>
        <span id="rss">
            <img src="<?php echo ROOT_URL.IMG_ICO_SM.'rss.png'; ?>" id="ico"><h3>Kom med din mening!</h3>
            <form action="" method="post">
                <input type="hidden" name="feed_date" value="<?php echo date("Y-m-d"); ?>">
                <label>Navn</label><input type="text" name="name" placeholder="Indtast Navn">
                <label>Email</label><input type="email" name="email" placeholder="Indtast Email">
                <label>Besked</label><textarea name="msg" placeholder="Kom med din mening om denne type side. Kom gerne med en fyldig begrundelse til hvorfor det er godt eller skidt."></textarea>
                <input type="submit" name="send" value="Send" id="btn">
                <input type="reset" value="Slet Alt" id="btn">
            </form>
            <?php
            if(isset($_POST['send'])) {
                $name = $_POST['name'];
                $email = $_POST['email'];
                $msg = $_POST['msg'];
                $feed_date = $_POST['feed_date'];
                $this->_sendFeed($name, $email, $msg, $feed_date);
            }
            ?>
        </span>
        <?php
        echo '</figure>';
    }

    function _sendFeed($name, $email, $msg, $feed_date) {
        $sql = "insert into feeds(name, email, msg, feed_date) value('$name', '$email', '$msg', '$feed_date')";
        if($this->_DBCONN->query($sql)) {
            echo '<span id="success">Mening tilkendegivet, Tak skal du have</span>';
        } else {
            echo '<span id="failed">Du skal udfylde alle felter korrekt!</span>';
        }
    }
}

reason.php
<?php

class Reason extends Database {

    function __construct() {
        parent::__construct();
    }

    function _reasons() {
        $sql = "select * from missions";
        $result = $this->_DBCONN->query($sql);
        if(mysqli_num_rows($result)>0) {
            while($row = $result->fetch_assoc()) {
                $title = $row['title'];
                $msg = $row['msg'];
                ?>
                <article id="about">
                    <span id="reason">
                        <h3><?php echo $title; ?></h3>
                        <?php echo nl2br($msg); ?>
                    </span>
                </article>
                <?php
            }
        } else {
            $title = 'info om side';
            $msg = 'Her kommer en beskrivelse af form&aring;l og vision for denne side.';
            ?>
            <article id="about">
                <span id="reason">
                    <h3><?php echo $title; ?></h3>
                    <?php echo nl2br($msg); ?>
                </span>
            </article>
            <?php
        }
    }
}

home.php
<?php
$featured->_feature();
$reasons->_reasons();
$featured->_rssFeed();

Det som er i det er at det som folk skriver ved at skulle give sin mening om sitet bliver gemt fint nok i min database. Jeg kan også sagtens hente det ud ingen problemer der. Men så snart jeg gerne vil have den til at auto refresh min <span id="feed"></feed> som indeholder det som folk har skrevet. så sker der ikke noget.

Jeg håber i kan finde ud af hvad jeg mener. eller må i sige til og jeg skal prøve at forklare det igen.

på forhånd tak for hjælpen.
Avatar billede Slater Ekspert
16. august 2016 - 15:05 #1
Har du gjort noget for at debugge det?
Er der nogen scriptfejl? Bliver AJAX'en udført? Tilføj en console.log til funktionen for at se om den kører. Se om du får svar fra serveren i dine developer tools, og evt. hvad det svar er, osv.

Ingen grund til at sidde og tygge sig igennem en masse kode, når man kan få en god indikation af, hvor fejlen er først.
Avatar billede delphiuser Mester
16. august 2016 - 15:14 #2
hvordan tilføjer jeg en console.log til funktionen?
Avatar billede Slater Ekspert
16. august 2016 - 15:21 #3
function auto_load() {
    console.log('Nu kører funktionen auto_load...');
  ...

Hvis du så har dine dev tools åbne, som du altid gør have mens du udvikler (som regel F12 - og vælg "Konsol"), så vil du se den besked dukke op, hvis funktionen bliver kørt korrekt.
Du kan også f.eks. bruge alert() til det samme, uden at behøve dev tools.

Samme sted kan du se dine AJAX-kald. I Firefox dukker de op i konsol automatisk, i Chrome skal du højreklikke og slå "Vis XmlHttpRequests" til først - eller bruge Netværk tab'en i stedet, men den er mindre overskuelig.
Hvis dit kald dukker op der, så klik på det for at se hvilke data den sender tilbage. Er den f.eks. rød og indeholder en fejlbesked, så vil den ikke udløse "success" funktionen i dit jQuery AJAX.
Avatar billede delphiuser Mester
16. august 2016 - 15:28 #4
jeg får denne besked når jeg åbner min konsol

ReferenceError: $ is not defined mgh_java.js13:1
<anonym>
mgh_java.js:13

Kan du fortælle mig hvad det går ud på?
Avatar billede Slater Ekspert
16. august 2016 - 15:30 #5
$ defineres af jQuery, som du bruger til dit AJAX, så det tyder på at jQuery ikke er korrekt inkluderet. Det skal linkes før dit eget script.
Avatar billede delphiuser Mester
16. august 2016 - 15:44 #6
GET
XHR
http://jp-pro/controller/features.php [HTTP/1.1 200 OK 20ms]
Functionen kunne ikke kaldes mgh_java.js:10:5
Nu køre functionen auto_load mgh_java.js:7:13

jeg får nu disse fejl og nu har jeg kørt jquery.js ind og nu står mit script og banker derud af. Men nu får jeg så også en helt anden fejl. som er denne

at den ikke kan finde min class Database i line 3 i features.php.
Avatar billede delphiuser Mester
16. august 2016 - 15:45 #7
skal lige siges jeg autoloader min database og min bootstrap fil i min index fil. så alt der står i min index er dette.

<?php

require 'config/config.php';

function __autoload($class) {
    $filename = LIBS.$class.'.php';
    if(file_exists($filename)) {
        require $filename;
    } else {
        throw new Exception('Kan ikke loade classen : '.$class);
    }
}

try {
    $app = new Bootstrap();
    $db = new Database();
} catch (Exception $e) {
    echo $e->getMessage();
}
Avatar billede Slater Ekspert
17. august 2016 - 08:24 #8
Er det den Exception, du får - "Kan ikke loade classen" ? Ellers hvilken fejl præcis?
Avatar billede delphiuser Mester
04. september 2016 - 16:22 #9
JEg fandt ud af at gøre det på en anden måde ind den måde jeg gjorde det på her også virkede det med det samme. undskyld besværet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester