Problème dans le Js..

mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention   -  
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde,

En fait voilà, je fais un site internet et j'ai un problème lors de l'appel d'un script js dans ma page php.

Donc j'ai un lien :

 <td> <a class="add" href="index.php?page=addPanier&id=<?= $plat->idplat ?>"><img src="./images/addcaddie.gif"/></a>


Quand on clique sur ce lien, j'ai envie que l'on affiche une alert avec dessus "ajouté à votre panier" ou sinon "erreur".
Voilà le script :

$(".add").click(function(event) {
            event.preventDefault();
            $.get($(this).attr("href"), function(data) {
                if (data.error) {
                    alert(data.message);
                } else {
                    if (confirm(data.message + ". Voulez-vous consulter votre panier ?")) {
                        location.href = 'index.php?page=panier'
                    }
                }
            }, 'json');
            return false;
        });


Et voilà le code de la page addPanier.php (qui est utilisé quand on clique sur le lien)

 try {
            $plat = $mg->getPlat($_GET['id']);
            $panier->add($plat[0]->idplat);
            $json['error'] = false;
            $json['message'] = 'Le produit a bien été ajouté à votre panier';
    } catch (PDOException $ex) {
         $json['message'] = "Ce produit n'existe pas";
    }



PROBLEME :

- Rien ne s'affiche lorsque je clique sur le lien (mais l'article se met bien dans le panier), je suppose donc que le problème vient du script JS mais pas d'idée..

Merci pour votre aide ^^

4 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,
Fais un echo de ta variable dans ton fichier PHP.. sinon AJAX ne pourra pas la récupérer...


 try {
            $plat = $mg->getPlat($_GET['id']);
            $panier->add($plat[0]->idplat);
            $json['error'] = false;
            $json['message'] = 'Le produit a bien été ajouté à votre panier';
    } catch (PDOException $ex) {
         $json['message'] = "Ce produit n'existe pas";
    }
echo json_encode($json);
?>

0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
{"ERROR":FALSE,"MESSAGE":"LE PRODUIT A BIEN \U00E9T\U00E9 AJOUT\U00E9 \U00E0 VOTRE PANIER"}

Voilà le message lorsque je l'affiche.. Il récupère bien le message et me dit que error = false.. Donc je ne sais pas ce qu'il peut y avoir.

Merci pour ta réponse ;)
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
ben c'est normal... ton produit a bien été ajouté.. donc error est FALSE...
C'est bon... çz correspond bien à ce que tu as codé dans ta page php
0
Utilisateur anonyme > mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
Ne devrais-tu pas utiliser JSON.parse pour transformer le json en objet?

//Comme ceci...
data = JSON.parse(data);
if (data.error) {
//...
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
Jordane : Oui, il s'ajoute bien au panier mais, il n'y a rien qui s'execute au niveau du javascript..

Si erreur = false alors il doit confirm(data.message + ". Voulez-vous consulter votre panier ?")
Si erreur = true alors il doit alert(data.message);

Mais aucunes alertes..

Sunr : Je viens d'essayer sans succès..
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
Essaye peut être simplement de remplacer le
$.get
par :
$.getJSON


$(".add").click(function(event) {
            event.preventDefault();
            $.getJSON($(this).attr("href"), function(data) {
               alert(data);
                if (data.error) {
                    alert(data.message);
                } else {
                    if (confirm(data.message + ". Voulez-vous consulter votre panier ?")) {
                        location.href = 'index.php?page=panier'
                    }
                }
            });
        });

0
Utilisateur anonyme
 
Ah, il semble que la fonction json_encode() ne supporte pas les accents.

//Ciblons le problème. Reprend ton Js intial et essaie ceci...
$json['message'] = 'Le produit a bien ete ajoute a votre panier';


C'est moche, mais je souhaite que tout fonctionne alors qu'on recherche une solution.
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
Non, c'est la même chose avec le message sans les accents, il laisse undefined.. comme s'il ne connaissait pas la variable $json['message']..
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
Personne n'a une petite idée.. ?

de pourquoi

$(".add").click(function(event) {
event.preventDefault();
$.get($(this).attr("href"), function(data) {
if (data.error) {
alert(data.message);
} else {
if (confirm(data.message + ". Voulez-vous consulter votre panier ?")) {
location.href = 'index.php?page=panier'
}
}
}, 'json');
return false;
});

Connait la variable $data mais n'affiche pas les alertes et lorsque l'on retire

'json' donc, on ne connait pas la variable $data.. (normal je pense.. Mais les alertes s'affichent sans données)
0
Utilisateur anonyme
 
J'ai copié/collé ton Js et simulé index.php et tout fonctionnait parfaitement. Assure-toi qu'au niveau de php le script ne retourne rien d'autre que le tableau encodé en json. Rien d'autre!

//Utilise cette fonction pour que ça fonctionne avec les accents.
$json['message'] = utf8_encode($json['message']);

Sinon je n'en sais rien, il nous faudrait tout ton code et ce serait un travail de moine.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
1 - N'oublies pas ...
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

2 - .. Sunr a raison.. c'est juste une question d'encodage.
Avec ceci.. ton code fonctionne très bien :
  $json['message'] = utf8_encode('Le produit a bien été ajouté à votre panier');
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour vos réponses !

Désolé pour le retard, je suis passé à un autre projet (que je devais finir pour mes examens)

Donc voilà mon js :

$(".add").click(function(event) {
            event.preventDefault();
            $.get($(this).attr("href"), function(data) {
                if (data.error) {
                    alert(data.message);
                } else {
                    if (confirm(data.message + ". Voulez-vous consulter votre panier ?")) {
                        location.href = 'index.php?page=panier';
                    }
                }
            });
            return false;
        });


Voilà mon php :

<?php
$json = array('error' => true);
if(isset($_GET['id'])) {
    $mg = new PlatManager($db);
    try {
            $plat = $mg->getPlat($_GET['id']);
            $panier->add($plat[0]->idplat);
            $json['error'] = false;
            $json['message'] = utf8_encode('Le produit a bien été ajouté à votre panier');
           
    } catch (PDOException $ex) {
         $json['message'] = "Ce produit n'existe pas";
    }
}
?>


Voilà le resultat lorsque j'ajoute un produit à mon panier :

"Undefined. Voulez vous consulter votre panier ?"

-Si je clique sur ok, je suis redirigé vers mon panier donc ça c'est bon
-Si je clique sur annuler, je reste sur le menu donc ça c'est bon aussi

Je ne vois absolument pas ce que mon fichier php peut retourner d'autre vu qu'il n'y a aucun return..

Encore désolé pour le retard et merci pour votre aide..
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Où est passée la ligne :
 echo json_encode($json);
qui devrait se trouver en bas de ton fichier PHP ??

<?php
$json = array('error' => true);
if(isset($_GET['id'])) {
    $mg = new PlatManager($db);
    try {
            $plat = $mg->getPlat($_GET['id']);
            $panier->add($plat[0]->idplat);
            $json['error'] = false;
            $json['message'] = utf8_encode('Le produit a bien été ajouté à votre panier');
           
    } catch (PDOException $ex) {
         $json['message'] = "Ce produit n'existe pas";
    }
}
 echo json_encode($json);
?>
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Je viens de le rajouter (le copier/collé de mon post était l'ancienne version)

Donc même avec cette ligne en plus, je n'ai rien de plus..

J'ai toujours le undefined. Voulez vous consulter votre panier ? (Mais quand je me met la console du naviguateur, je vois qu'il m'affiche dans la page "addPanier.php"
{"ERROR":FALSE,"MESSAGE":"LE PRODUIT A BIEN \U00C3\U00A9T\U00C3\U00A9 AJOUT\U00C3\U00A9 \U00C3\U00A0 VOTRE PANIER"}
0