JQUERY et json_encode qui encode une fois sur 2 [Résolu]

BBFUNK01 1313 Messages postés jeudi 16 juillet 2009Date d'inscription 20 juin 2014 Dernière intervention - 26 nov. 2011 à 05:56 - Dernière réponse : BBFUNK01 1313 Messages postés jeudi 16 juillet 2009Date d'inscription 20 juin 2014 Dernière intervention
- 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... ;-) ;
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
BBFUNK01 1313 Messages postés jeudi 16 juillet 2009Date d'inscription 20 juin 2014 Dernière intervention - 26 nov. 2011 à 06:36
3
Merci
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... ;-) ;

Merci BBFUNK01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de BBFUNK01

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.