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éponses


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

cordialement

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

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

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){

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

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);

??

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

Salut !

Il manque pas une virgule ?

},'json');

Au lieu de

}'json');

Bisous ;)

bien vu ^^

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

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

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

Et si tu remplaces

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

Par

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

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?

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" );

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);

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

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

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.

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

Salut,

En effet Pewel , pas besoin de passer le {}, et je ne pensais pas que ce soit bloquant non plus, jusqu'à ce que je vois l'ensemble du code.
Est-ce que le fait de passer {} n'écrase pas le paramètre GET'id'] ?

T'es sur également de bien importer jquery ? T'as une erreur javascript lorsque tu charges la page ? Ou lorsque tu cliques sur le lien ?

Que te retournes un console.log(data) ?

arckaliann , essaie ce que t'as préconisé Pewel en ajoutant le console.log(data) pour vérifier tout ça

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

J'ai viré aussi le return false; pas besoin

Ne perds pas espoir :)

Bisous

Bonsoir,
je reviens sur ce post même s'il est vieux.
Je voudrais savoir si quelqu'un à trouver la réponse car dans mon cas la boite de dialogue ne fonctionne pas non plus

(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.php';   
                        }else{
                            $('#total').empty().append(data.total);
                            $('#count').empty().append(data.count);
                        }
                    }
                    }, 'json');
                    return false;
          });
          })(jQuery);

Merci d'avance de vos réponse