indefini dans la boite de dialogue résolu

Default
,

Bonjour,j'ai suivis le tuto sur le panier qui marche très bien,merci Grafikart pour les tutos,j'ai un problémes avec la boite de dialogue si je respecte a la lettre la boite de dialogue apparait pas,si j’enlève le json qui se trouve au dessus de return false sur la requête ci dessous :

(function($){


    $('.addpanier').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='../panier/panier_tempo.php';
                }else{


                }
            }
        }'json');
        return false;


    });
})(jQuery);

la boite de dialogue apparait pas,par contre si je l’enlève,elle apparait mais j'ai un undefined+le message :voulez vous etc..,

comment puis je faire apparaitre le message qui se trouve sur le code ci dessous donc :l'article a bien été etc..

$json'error']=false;
        data.message +"l'article a bien été ajoute a votre panier";
}else{
        $json'message']="Vous n'avez pas sélectionne l'article a ajouter au panier";
}
echo json_encode($json);

merci pour l'aide car j'ai rien trouvé sur la toile a se sujet

22 Réponse

1
Default
,

Bonjour, que dit la console javascript ?

place un console.dir(data) , dans la callback du js pour voir les données renvoyées

cordialement

Default
,

qu'est ce que tu appel le callback du js ?

Default
,

là:

(function($){


    $('.addpanier').click(function(event){
        event.preventDefault();
        $.get($(this).attr('href')'{},function(data){
            console.dir(data); <==ICI
            if(data.error){
            alert(data.message);
            }else{
                if(confirm(data.message +'.Voulez-vous consulter votre panier?')){
                    location.href='../panier/panier_tempo.php';
                }else{


                }
            }
        }'json');
        return false;


    });


})(jQuery);

ouvre la console javascript, l'objet data s'affichera au clic , tu pourras contrôler ses données

Default
,

D'ailleurs ici:

$.get($(this).attr('href')'{},function(data){

ya une faute de frappe j'imagine que c'est :

$.get($(this).attr('href'),{},function(data){
Default
,

donc avec firebug/console/all il me met ceci:{"error":false,"message":"l'article a bien ete ajoute a votre panier"}et quand je descend le log

There are no child objects

Default
,

php t'as bien ça ?

$json'error']=false;
        $json'message'] = "l'article a bien été ajoute a votre panier";


}else{
        $json'message']="Vous n'avez pas sélectionne l'article a ajouter au panier";
}
echo json_encode($json);

??

Default
,

oui oui j'ai bien sa,j'avais voulu tester autre chose et j'ai oublié de le changer désolé

Default
,

Salut !

Il manque pas une virgule ?

},'json');

Au lieu de

}'json');

Bisous ;)

Default
,

bien vu ^^

Default
,

je remet le code sans le json qui se trouve au dessus du return false car comme je les marqué sur mon 1er post,la boite de dialogue apparait pas,en le retirant la boite apparait mais avec le undefined suivis de la phrase :Voulez-vous consulter votre panier?

(function($){


    $('.addpanier').click(function(event){
        event.preventDefault();
        $.get($(this).attr('href'),{},function(data){
           console.dir(data);
            if(data.error){
            alert(data.message);
            }else{
                if(confirm(data.message +'.Voulez-vous consulter votre panier?')){
                    location.href='../panier/panier_tempo.php';
                }else{


                }
            }
        });
        return false;


    });
})(jQuery);

je vois pas ou se trouve le problémes,pourquoi la phrase :l'article a bien été ajoute a votre panier,apparait pas dans la boite de dialogue comme sur le tuto

Default
,

Salut,

Récapitulons.

Côté PHP, t'as

$json'error']=false;
        $json'message'] = "l'article a bien été ajoute a votre panier";


}else{
        $json'message']="Vous n'avez pas sélectionne l'article a ajouter au panier";
}
echo json_encode($json);

Et côté JS, t'as

$.get($(this).attr('href'),{},function(data){
    console.dir(data);
    if(data.error){
        alert(data.message);
        }else{
            if(confirm(data.message +'.Voulez-vous consulter votre panier?')){
                location.href='../panier/panier_tempo.php';
             }else{


             }
        }
});

Côté PHP, $json est un tableau

Côté Javascript, data est traité comme un objet.

Remplace tes data.error, par data'error'] et data.message par data'message'].

Ah, et dernière chose,

if(confirm(data.message +'.Voulez-vous consulter votre panier?')){
    location.href='../panier/panier_tempo.php';
}else{


}

Un else vide ne sert à rien, retire le pour ne garder que

if(confirm(data.message +'.Voulez-vous consulter votre panier?')){
    location.href='../panier/panier_tempo.php';
}

Bisous

Default
,

voici les changements coté js

(function($){


    $('.addpanier').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='../panier/panier_tempo.php';
                }
            }
        });
        return false;


    });
})(jQuery);

sa ne change rien,on dirait que la partie php n'es pas pris en compte

Default
,

Et si tu remplaces

if(confirm(data.message +'.Voulez-vous consulter votre panier?')){

Par

if(confirm(data'message'] +'.Voulez-vous consulter votre panier?')){
Default
,

j'ai aussi testé mais toujours la même chose,est ce que sa pourrait venir de jquery qui chez moi est pas a jours?

Default
,

Bonjour bonjour :D

A quoi servent les crochets dans l'instruction suivante ?

$.get($(this).attr('href'),{},function(data){ ...

Dans la doc de jquery, c'est l'url en premier, la fonction en deuxième :

$.get( "test.php", function( data ) {...

D'ailleurs, voilà l'exemple complet pour récupérer du json

$.get( "test.php", function( data ) {
  $( "body" )
    .append( "Name: " + data.name ) // John
    .append( "Time: " + data.time ); // 2pm
}, "json" );
Default
,

Salut,

http://api.jquery.com/jQuery.get/

Dans la doc jquery, de ce qu'on peut y lire, le 2e paramètre est les data envoyés par la requête GET.

Là c'est vide car il n'y en n'a pas.

Juste pour voir, essaye avec ça

(function($){


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


    });


})(jQuery);

J'ai juste ajouté

data = $.parseJson(data);
Default
,

j'ai testé et sa fonctionne pas ,pire le lien est mêmes plus bloqué il m'envoie direct sur la page du lien,donc il doit y avoir quelques chose mais quoi mystére

Default
,

Il faudrait dans ce cas que tu nous montres l'ensemble de ton code présent dans ta page html, ton code php, et ton code js.

Bisous

Default
,

Chokkan, je comprends ce que tu veux dire mais ce que je ne comprends pas, c'est que le paramètre est optionnel et on passe quand même un paramètre vide.

Du coup, pourquoi on ne passe rien tout court, au lieu de passer quelque chose de vide ?

En effet, ça ne va pas ralentir le code et je chipotte un peu, mais en tout cas ça peut rendre le code plus logique/lisible/compréhensible.

Après, si tu utilise parseJSON, fait bien attention, c'est

data.message

et non

data'message']

parseJSON retourne un objet js, non un tableau.

Default
,

code js:

(function($){


    $('.addpanier').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='../panier/panier_tempo.php';
                }
            }
        });
        return false;


    });
})(jQuery);

code php:

<?php
include("../includes/doctype.php"); 
include("../includes/panier.php");
$json =array('error'=> true);
$panier=new panier($DB);
if(isset($_GET'id'])){
$product=$DB->query('SELECT id FROM articles INNER JOIN types ON id_articles = id_types
                        WHERE id=:id',array('id'=>$_GET'id']));
        if(empty($product)){
            $json'message']="cette article n'existe pas";
        }
        $panier->ajouterarticle($product[0]->id);
        $json'error']=false;
        $json'message']="l'article a bien ete ajoute a votre panier";
}else{
        $json'message']="Vous n'avez pas selectionnee l'article a ajouter au panier";
}
echo json_encode($json);
?>

code html/php car la page est en php

<?php
    $product=$DB->query('SELECT * FROM articles INNER JOIN types ON id_articles = id_types
                        WHERE id=:id',array('id'=>$id));
        foreach($product as $prod):?>
            <div class="final">
                <a href="../image/image/<?php echo $prod->image?>"class="zoombox"><img src="../image/image/<?php echo $prod->image?> "width ="100" height="127" /></a>    
                <a href="../image/image/<?php echo $prod->arriere?>"class="zoombox"><img src="../image/image/<?php echo $prod->arriere?>"width="100" height="127"/></a>
            </div>
                <div class="classe2">
                    prix en magasin:<?php echo htmlspecialchars($prod->prix);?> €<br/><br/>
                    stock:<?php echo htmlspecialchars($prod->stock); ?><br/><br/>
                    <?php
                        if($prod->stock==0)
                        {
                        echo'<a href="../tests/reservation.php?n='.htmlspecialchars($prod->id).'">réservation</a>   
                                             <br/><br/>';
                        }?>
                    <?php 
                                            if($prod->stock!=0)    
                            {?>
                        <a class=" add addpanier" href="../panier
                                          /addpanier.php?id<?=$prod->id;?>"><img src="../image /ajouter.png"/></a>
                <?php
                }
                echo'</div>'?>


 <h2>résumé du jeu</h2>


           <div class="paragraphe1">
             <?php echo stripslashes(htmlspecialchars($prod->description));
            endforeach;?>
        </div>

je met le code ou se trouve le bouton d'envoi

1