1 votes

jQuery : Rafraîchissement automatique d'un `<div>`.

J'ai du mal à obtenir ceci <div> pour une mise à jour automatique à l'aide de jQuery. Il s'agit essentiellement d'une fonction de chat dont la page devrait être rafraîchie toutes les deux secondes. J'ai essayé plusieurs variantes de ceci sans succès, donc une réécriture complète et différente est plus que bienvenue.

Code jQuery :

function updateChat() {
    $.get("chat_data.php", function(data) {
        $("div#chattable").html(data);
    });

    window.setTimeout("updateChat();", 2000);
}

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

Voici le <div> qui récupère les données de chat_data.php . Cela devrait être mis à jour :

<div id="chattable">
    <?php include("js/chat_data.php"); ?>
</div>

chat_data.php :

<?php foreach($query->result() as $row):
    echo "<div class='chatrow'>";
    echo "<div class='chattime'>".date("[M.d] g:ia",strtotime($row->time))."</div>";
    echo "<div class='chatnamematch'>[".$row->name."]</div>";
    echo "<div class='chatbody'>".$row->body."</div>";
    echo "</div>";
endforeach; ?>

2voto

Jesse Dearing Points 1602

Tout semble devoir fonctionner. L'URL dans $.get doit-elle être "js/chat_data.php" au lieu de "chat_data.php" ?

J'enlèverais aussi l'include php du div parce qu'il va juste se charger via AJAX de toute façon.

2voto

Click Upvote Points 34295

L'erreur que vous obtenez, de Call to a member function result() on a non-object in /var/www/js/chat_data.php on line 1 signifie que la variable $query n'est pas réglé correctement. Vous avez dit que vous utilisiez CodeIgniter, si c'est le cas, dans quel dossier se trouve le fichier ajax_data.php situé dans ? Application/contrôleurs ?

1voto

jonstjohn Points 23326

Quelques réflexions et un exemple de code alternatif. Il est difficile de dire où se situe votre problème, il ne s'agit donc que de quelques idées.

  • Vous pouvez déplacer l'attente dans votre PHP au lieu d'utiliser le timer javascript pour ré-exécuter.

  • Essayez d'utiliser la méthode plus simple jQuery.load().

    function updateChat() {
    
     $("#chattable").load("chat_data.php", function() { updateChat(); });
    
    }

Du côté de PHP,

  sleep(2); // sleep for two seconds before returning output

L'effet est similaire, mais il est un peu plus simple. La fonction updateChat() n'est pas appelée avant le retour de la sortie.

Eh bien, juste une idée. Je ne suis pas sûr que ce soit la bonne solution, mais cela pourrait vous aider à isoler vos problèmes (en retirant la variable js timer).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X