[RESOLU] Notifications PDO - PHP Ajax ne fonctionne pas

Eléphant du PHP | 386 Messages

17 sept. 2012, 16:32

Bonjour,

J'ai un script simple de messages / notification qui fonctionne mais c'est Ajax qui ne veux pas fonctionner.
Normalement il devrait appeler une page 'notifications.php' qui contient le script pour trouver les messages reçus.

La page notifications.php et index.php :
<?php
require('connect.php');

$req = $bdd->prepare('SELECT COUNT(id) as row FROM wa_notifications WHERE lu=:lu');
$req->execute(array(':lu'=>false));

$data = $req->fetch(PDO::FETCH_OBJ);

echo $data->row;
?>
<?php
require('connect.php');

$req = $bdd->prepare('SELECT COUNT(id) as row FROM wa_notifications WHERE lu=:lu');
$req->execute(array(':lu'=>false));

$data = $req->fetch(PDO::FETCH_OBJ);

$count = $data->row;
?>
<!DOCTYPE html> 
<html lang="fr"> 
<head>
	<meta charset="UTF-8">
    <script type="text/javascript" src="../js/jquery.js"></script>
    <script type="text/javascript" src="script.js"></script>
    <link rel="stylesheet" href="style.css">
	<title>qsdfqdsfqsdf</title>
</head>
<body>
      <div id="content">
        
        <div id="menu">
            <ul>
                <li><a href="accueil.php">Accueil</a></li>
                <li><a href="#">Compte</a></li>
                <li><a href="messages.php" <?php if($count>0):?> class="notification" data-notification="<?php echo $count;?>" <?php endif;?>>Messages</a></li>
            </ul>
        </div>
        
        </div>
</body>
</html>
Le script.js

[javascript]
function getNotifications()
{
$.ajax({

type: 'POST',
url: 'notifications.php',
success: function(data){
if(data>0){
$('.notification').attr('data-notification', data);
}
}
});
setTimeout('getNotifications()', 5000);
}
$(document).ready(function(){
getNotifications();
});
[/javascript]

J'ai cherché sur Google, j'ai pas réussi à trouver l'erreur, ou la modif à faire :(
Merci d'avance pour vos messages

ViPHP
xTG
ViPHP | 7331 Messages

17 sept. 2012, 16:48

Si le PHP fonctionne, regardons le JS.
Un message d'erreur dans la console du navigateur ?
Tu peux debug avec un simple alert (ou console.log) :

Code : Tout sélectionner

success: function(data){ alert(data); if(data>0){ $('.notification').attr('data-notification', data); } }

Eléphant du PHP | 386 Messages

17 sept. 2012, 16:51

J'ai fais ce que tu m'a écris :wink:
A chaque 5 secondes, une fenêtre s'ouvre sur Firefox, et affiche "0".
Donc je pense que ça veut dire qu'il n'y a pas d'erreur.
Le problème c'est que la notification ne s'affiche pas au bout de 5 secondes :(

ViPHP
xTG
ViPHP | 7331 Messages

17 sept. 2012, 16:54

Je dirais dans ce cas que c'est l'attribut qui n'est pas réévalué par le navigateur.
Je ne connais pas cet attribut HTML5 donc je ne peux que supposer.
Si tu as le alert c'est que la requête Ajax fonctionne bien, donc c'est un problème HTML au final.

Eléphant du PHP | 386 Messages

17 sept. 2012, 16:56

Pourtant, la balise HTML5 est bien en place.
Je vais vérifié si une balise n'a pas sauté ^^

Eléphant du PHP | 386 Messages

17 sept. 2012, 17:03

Mes balises sont bien écrites :cry:

moicequejendis
Invité n'ayant pas de compte PHPfrance

26 nov. 2012, 16:35

Salut,

Ton code fonctionne mais il est normal que tu ne vois rien s'afficher car tu définis 'data-notification' comme attribut du TAG a et c'est lui qui est mis à jours à chaque appel:
<li><a href="messages.php" <?php if($count>0):?> class="notification" data-notification="<?php echo $count;?>" <?php endif;?>>Messages</a></li>

De plus le résultat de notification.php est toujours 0, renvoyé par echo $data->row et dans ton js tu ne gére que lorsque data>0.
Ce que tu dois corriger c'est :
1 le retour de notification.php
2 et ensuite remplacer:
$('.notification').attr('data-notification', data);
par quelque chose du genre:
$('.notification').html('Messages: '+data);