JQUERY et json_encode qui encode une fois sur 2

Résolu
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 26 nov. 2011 à 05:56
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 26 nov. 2011 à 06:36
Hello,

voici mon problème :

pour un de mes sites je suis en train de mettre en place un module de notification qui avertit l'utilisateur des messages non lus qu'il a reçu.
J'effectue donc une requête SQL en passant par un script $ajax qui s'exécute toutes les 7 secondes, cela sollicite un script PHP dans lequel je remplis un array que j'encode avec json_encode pour la récupération dans mon fichier.js.

Le problème :

bizarrement sur certaines pages mon script js décode bien l'array et m'affiche les données correctement, mais sur d'autres pages le décodage ne s'effectue pas correctement et les données ne s'affichent pas comme elles devraient.

Voici le résultat de mon alert(data); sur les pages qui fonctionnent :

1 nouveau message,0 nouveau message photo,0 proposition de Contrat,1 demande d'album

Et voici le résultat de mon alert(data); sur les pages qui ne fonctionnent pas :

["1 nouveau message","0 nouveau message photo","0 proposition de Contrat","1 demande d'album"]

Donc sur les pages qui ne fonctionnent pas le décodage ne supprime pas les crochets ni les guillemets...

Voici mon script js qui sollicite le script PHP :

$(document).ready(function() {

$('#notif').hide();

$('.close_notif').click(function(){
$('#notif').fadeOut(150);
});

setInterval(function(){

$.ajax({
type: "GET",
url: "the_news.php",
success:function(data){ 
if(data != "0"){

alert(data);

$.each(data, function(key, value) {

if(key == 0){
if(value == "0 nouveau message"){
$('#note1').html(''+value);
}else{
$('#note1').html('[mes-messages.php '+value+']');
}
}else if(key == 1){
if(value == "0 nouveau message photo"){
$('#note2').html(''+value);
}else{
$('#note2').html('[mes-messages-photo.php '+value+']');
}
}else if(key == 2){
if(value == "0 proposition de Contrat Sexe"){
$('#note3').html(''+value);
}else{
$('#note3').html('[mes-contrats.php '+value+']');
}
}else if(key == 3){
if(value == "0 demande d'album"){
$('#note4').html(''+value);
}else{
$('#note4').html('[mes-albums.php '+value+']');
}
}

       			});

$('#notif').fadeIn(250);

}else if(data == "0"){

alert("rien à déclarer");
  			}
}
});	

},7000);


});


Et voici mon script PHP sollicité pour la requête :

<?php

session_start();

try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;bdd', 'root', 'root', $pdo_options);

$analyseMess $bdd->prepare('SELECT id FROM message WHERE id '.$_SESSION['id'].' AND statut = 0');
$analyseMess->execute();
$ResMess = $analyseMess->rowCount();

if($ResMess == 0){
$Rmess = $ResMess.' nouveau message';
$tabNews[0] = $Rmess;
$ind1 = 0;
}else if($ResMess == 1){
$Rmess = $ResMess.' nouveau message';
$tabNews[0] = $Rmess;
$ind1 = 1;
}else if($ResMess > 1){
$Rmess = $ResMess.' nouveaux messages';
$tabNews[0] = $Rmess;
$ind1 = 1;
}

$analyseMessP $bdd->prepare('SELECT id FROM message2 WHERE id '.$_SESSION['id'].' AND statut = 0');
$analyseMessP->execute();
$ResMessP = $analyseMessP->rowCount();

if($ResMessP == 0){
$RmessP = $ResMessP.' nouveau message photo';
$tabNews[1] = $RmessP;
$ind2 = 0;
}else if($ResMessP == 1){
$RmessP = $ResMessP.' nouveau message photo';
$tabNews[1] = $RmessP;
$ind2 = 1;
}else if($ResMessP > 1){
$RmessP = $ResMessP.' nouveaux messages photos';
$tabNews[1] = $RmessP;
$ind2 = 1;
}

$analyseCT $bdd->prepare('SELECT id FROM contrat WHERE id '.$_SESSION['id'].' AND statut = 0');
$analyseCT->execute();
$ResCT = $analyseCT->rowCount();

if($ResCT == 0){
$Rct = $ResCT.' proposition de Contrat';
$tabNews[2] = $Rct;
$ind3 = 0;
}else if($ResCT == 1){
$Rct = $ResCT.' proposition de Contrat';
$tabNews[2] = $Rct;
$ind3 = 1;
}else if($ResCT > 1){
$Rct = $ResCT.' propositions de Contrat';
$tabNews[2] = $Rct;
$ind3 = 1;
}

$analyseAL $bdd->prepare('SELECT id FROM album WHERE id '.$_SESSION['id'].' AND statut = 0');
$analyseAL->execute();
$ResAL = $analyseAL->rowCount();

if($ResAL == 0){
$Ral = $ResAL.' demande d\'album';
$tabNews[3] = $Ral;
$ind4 = 0;
}else if($ResAL == 1){
$Ral = $ResAL.' demande d\'album';
$tabNews[3] = $Ral;
$ind4 = 1;
}else if($ResCT > 1){
$Ral = $ResAL.' demandes d\'album';
$tabNews[3] = $Ral;
$ind4 = 1;
}

}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

$INDIC = $ind1 + $ind2 + $ind3 + $ind4;

if($INDIC == 0){

echo "0";

}else if($INDIC > 0){

header('Content-type: application/json');
echo json_encode($tabNews);

}

?>


Bref, je ne comprends pas d'où peut venir le souci : le script chargé est le même sur chaque page et il n'y a pas de raison que ça marche sur certaines et pas sur d'autres.

Si quelqu'un a déjà rencontré ce genre de problème je veux bien un éclaircissement car là je bloque considérablement.

Merci ;),

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

1 réponse

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
26 nov. 2011 à 06:36
Bon et bien j'ai finalement trouvé : il suffit de préciser le datatype dans l'appel $ajax et ça marche :

$.ajax({
type: "GET",
dataType: 'json',
url: "the_news.php",
success:function(data){


BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;
3
Rejoignez-nous