IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Récupérer plusieurs valeurs avec xhr.responseText


Sujet :

AJAX

  1. #1
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    November 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : November 2012
    Messages : 128
    Points : 56
    Points
    56
    Par défaut Récupérer plusieurs valeurs avec xhr.responseText
    bonjour
    je voudrais savoir si c'est possible de récupérer plusieurs valeur.
    je voudrais afficher une erreur si il y a et l'afficher dans le div erreur.
    je ne vois pas comment faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function lookpanier() {
    				document.getElementById('vispanier').style.display='block';
    				let idart = <?php echo $idan; ?>;
    				let article = "<?php echo $titre_astuce; ?>";
    				let stock = <?php echo $quanti; ?>;
    				let xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour afficher dans le div
    						document.getElementById('visupanier').innerHTML = leselect;
    						document.getElementById('erreur').innerHTML = leselect;
    						}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","anonc/panier.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
    				xhr.send("idan="+idart+"&article="+article+"&stock="+stock);
    }
    fichier panier

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    if (isset($_POST['idan']) AND is_numeric($_POST['idan']) AND !empty($_POST['idan']) AND isset($_POST['stock']) AND !empty($_POST['stock']) AND isset($_POST['article']) AND !empty($_POST['article'])) 
    {
    $idan = $_POST['idan'];
    $article = $_POST['article'];
    $stock = $_POST['stock'];
     
     
     
    $baspani = $bdd->prepare("SELECT sum(quanti) as quant FROM panier WHERE idan = :idan AND ip = :ip");
    	$baspani->execute(array(
    	'idan'=> $idan,
    	'ip'=> $ip
        ));
     
    if ($baspanier = $baspani->fetch()){
     $quanti = $baspanier['quant'];
    } else {$quanti = 1; }
     
    if ($quanti < $stock){
     
    if($quanti > 0){
    	$enr = $bdd->prepare("UPDATE panier SET quanti = :quanti, date = NOW() WHERE idan = :idan AND ip = :ip");
    	$enr->execute(array(
    	'quanti'=> $quanti + 1,
    	'idan'=> $idan,
    	'ip'=> $ip
        ));	
     
    } else {
    $quanti = 1;	
    $enr = $bdd->prepare("INSERT INTO panier SET idan = :idan, user = :user, ip = :ip, article = :article, quanti = :quanti, date = NOW()");
    $enr->execute(array(
    	'idan'=> $idan,
    	'user'=> $log,
    	'ip'=> $ip,
    	'article'=> $article,
    	'quanti'=> $quanti
    ));	 
    }	
    } else {
    	$message = "Plus de stock actuellement";
    }
    $baspan = $bdd->prepare("SELECT sum(quanti) as nbquat FROM panier WHERE ip = :ip");
    	$baspan->execute(array(
    	'ip'=> $ip
        ));
     
    if ($bpanier = $baspan->fetch()){
    $quanti = $bpanier['nbquat'];
    } 
    echo $quanti;
    }
    else {
    	$message = "Problème d'identification du produit";
    }
    if(isset($message)){
    	echo $message;
    }

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    January 2012
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : January 2012
    Messages : 2 342
    Points : 4 628
    Points
    4 628
    Par défaut
    Bonjour,

    Il faudrait utiliser le type de données JSON xhr.responseType = 'json'; pour pouvoir récupérer plusieurs valeurs depuis le fichier PHP et les exploiter en JS.

  3. #3
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    November 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : November 2012
    Messages : 128
    Points : 56
    Points
    56
    Par défaut
    merci, tu as un exemple car je ne vois pas comment récupérer en js

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    January 2012
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : January 2012
    Messages : 2 342
    Points : 4 628
    Points
    4 628
    Par défaut
    Commences par déclarer une variable de type tableau au début du fichier PHP $data=[]; puis après si tu veux par exemple rajouter le message d'erreur dans le tableau, tu peux le faire comme ça if(isset($message)) $data["erreurMsg"]=$message;, et au niveau JS tu peux l'exploiter comme suite let errMsg=xhr.response.erreurMsg;.

    La même chose pour les autres variables ...

    Le plus important c'est de supprimer tous les echo et renvoyer seulement le tableau à la fin du traitement echo json_encode($data);

    Pour avoir plus de détails sur la requête XMLHttpRequest, tu peux utiliser l'onglet Réseau de l'outil de développement du navigateur.

  5. #5
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    November 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : November 2012
    Messages : 128
    Points : 56
    Points
    56
    Par défaut
    merci.
    j'ai essayer mais me marque undefined sur tous les variables

    js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function lookpanier() {
    				document.getElementById('vispanier').style.display='block';
    				let idart = <?php echo $idan; ?>;
    				let article = "<?php echo $titre_astuce; ?>";
    				let stock = <?php echo $quanti; ?>;
    				let xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						let errMsg = xhr.response.erreurMsg;
    						let qantpanier = xhr.response.qantpan;
    						let messag = xhr.response.mesag;
    					console.log(qantpanier);
    						if(errMsg !== ''){
    							document.getElementById('erreur').innerHTML = errMsg;
    						}
    						if(qantpanier !== ''){
    							document.getElementById('qtpanier').innerHTML = qantpanier;
    						}
    						if(messag !== ''){
    							document.getElementById('message').innerHTML = messag;
    						}
    						}
    				}
    php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    } else {
    	$message = "Plus de stock actuellement";
    	$data["mesag"]= $message;
    }
    $baspan = $bdd->prepare("SELECT sum(quanti) as nbquat FROM panier WHERE ip = :ip");
    	$baspan->execute(array(
    	'ip'=> $ip
        ));
     
    if ($bpanier = $baspan->fetch()){
    $quanti = $bpanier['nbquat'];
    } 
     
    $data["qantpan"]= $quanti;
    }
    else {
    	$erre = "Problème d'identification du produit";
    	$data["erreurMsg"]= $erre;
    }
     
    echo json_encode($data);

    la function get
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	function getXhr(){
                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } catch (e) {
    			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			            }
    				}
    				else { // XMLHttpRequest non supporté par le navigateur 
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    				   xhr = false; 
    				} 
                                    return xhr;
    			}
    il ne m'affiche pas erreur...je ne sais pas ou ça cloche

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    January 2012
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : January 2012
    Messages : 2 342
    Points : 4 628
    Points
    4 628
    Par défaut
    Tu as oublié de définir le type de donnée responseType.

    Ajoutes xhr.responseType = 'json'; après la déclaration de xhr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    let xhr = getXhr();
    xhr.responseType = 'json';
    ....

  7. #7
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    November 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : November 2012
    Messages : 128
    Points : 56
    Points
    56
    Par défaut
    super merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Récupérer plusieurs valeurs
    Par bogsy15 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 09/08/2006, 11h46
  2. Réponses: 7
    Dernier message: 31/07/2006, 22h44
  3. Réponses: 16
    Dernier message: 19/07/2006, 01h16
  4. Récupérer une valeur avec un textarea
    Par Viau dans le forum Langage
    Réponses: 6
    Dernier message: 14/02/2006, 18h09
  5. [VB.NET] [ODBC] Récupérer des valeurs avec requête ODBC?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/03/2005, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo