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 :

[AJAX] Recevoir plusieurs résultats dans le XML afin de les mettre en forme


Sujet :

AJAX

  1. #1
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut [AJAX] Recevoir plusieurs résultats dans le XML afin de les mettre en forme
    Bonsoir, ou bonjour,

    je ne savais pas du tout comment synthétiser mon problème dans le court espace réservé au titre, mais voilà;

    J'ai un classement de produits, je clique sur un produit pour avoir ses caractéristiques, et comme j'aimerais que la page ne se recharge pas et que ça s'affiche à coté, j'utilise ajax,

    jusqu'ici tout fonctionne.

    je récupère plusieurs lignes de données (les caractéristiques) dans une bdd concernant le produit en question et je les affiche. Ca marche, mais je n'arrive pas à séparer les résultats

    En fait j'ai ça dans mon XML :

    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
    echo '<response>';
     
    $produit = $_GET['produit'];
     
    include "../../../connect/connect.php";
     
    	$sql="SELECT * FROM $bdd WHERE produit='".$produit."' ";
     
    	$req=mysql_query($sql) or die (mysql_error());
     
     
    	$caractéristiques = array();
     
    	while($ligne=mysql_fetch_assoc($req)){
    			array_push($caractéristiques, $ligne['id']);
    			array_push($caractéristiques, $ligne['nom']);
    			array_push($caractéristiques, $ligne['couleur']);
    	}	
     
    	for($i=0;$i<count($caractéristiques);$i++){
    		echo $caractéristiques[$i]."<br/>";}
     
    echo '</response>';
    Le <br/> c'était pour vous montrer une de mes tentatives pour essayer au moins de mettre les caractéristiques à la ligne. Mais ça fait planter le XML apparemment si on le met.

    Mais la balise response considère le tout comme une seule réponse.

    Etant débutant en Ajax, à la base ce code que j'avais pris en cours était destiné à utiliser un seul résultat. Mais moi je voudrais pouvoir traiter plusieurs données d'une requête et les mettre en forme tout simplement.

    Merci de m'avoir lu

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Marc22
    En fait j'ai ça dans mon XML :
    Ben j'espère pas
    Ce que tu montres est du PHP, pas du XML

    Sinon, pour pouvoir être traité comme une réponse XML, le résultat de la requête doit former un document XML valide, en particulier une en-tête XML et une balise parent unique.

    Ceci dit, je ne suis pas sûr d'avoir compris ce que tu demandes

  4. #4
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Merci andry.aime.

    Bovino, c'est du xml fait sous du php (c'était comme ça dans mes cours j'ai fait copier collé bêtement)

    L'en tête est écrite comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    header('Content-Type: text/xml');
    echo '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>';
    En fait sur les tuto, la partie qui va m'intéresser et qui devrait résoudre mon soucis, c'est celle-ci :

    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
    /* Récupérer la liste des items donc la liste des DVD */
    var items    = response.getElementsByTagName("item");
    var html     = ''; /* Présentation HTML de la liste des DVD */
    /* Nombre de DVD */
    count        = items.length;
    for(i = 0; i < count; i++) { /* POUR CHAQUE item */
        html += '<div class="item">';
        html += '<h1>' + items[i].getElementsByTagName("title")[0].firstChild.nodeValue + '</h1>';
        html += '<div class="author">R&eacute;alisateur : ';
        html += items[i].getElementsByTagName("director")[0].firstChild.nodeValue + '</div>';
        html += '<div class="price">Prix : ';
        html += items[i].getElementsByTagName("price")[0].firstChild.nodeValue + ' €</div>';
        html += '</div>';
    }
    document.getElementById('content').innerHTML += html;
    En fait moi dans mon .js, en guise de fonction handleHttpResponse()

    j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function handleServerResponse() { // exécuté quand le serveur répond
      if (xmlHttp.readyState == 4) { // si la transaction est finie
         if (xmlHttp.status == 200) { // si fini comme il faut
          xmlResponse = xmlHttp.responseXML; // extrait le code XML reçu
          xmlDocumentElement = xmlResponse.documentElement;  // obtient la racine du document XML
          message = xmlDocumentElement.firstChild.data; // récupère le texte contenu dans le premier sous-element de la racine XML
          document.getElementById("divMessage").innerHTML = '<i>' + message + '</i>'; // met à jour l’élément divMessage avec le texte récupéré
          //setTimeout('stats_equipe()', 1000); // relance la séquence
        }else {   // status différent de 200 = erreur
          alert("There was a problem accessing the server: " + xmlHttp.statusText);
        }
      }
    }
    Et pour obtenir le résultat de la racine voulue, on utilisait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlResponse = xmlHttp.responseXML; // extrait le code XML reçu
    Alors que sur le tuto, ils le font de cette manière (qui au passage est plus claire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var items = response.getElementsByTagName("item");
    En comparant les deux, vous me conseilleriez quoi? La fonction de mes cours handleServerResponse() est elle bien et bien adaptée?

    Et pourquoi dans mes cours, on instancie pas les variables avec un var?

  5. #5
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    J'y suis parvenu ça fonctionne. Merci pour le tuto !

    Bon week end !

  6. #6
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Question subsidiaire, la mise en forme je pouvais la faire via un fichier xsl non?

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

Discussions similaires

  1. Recherche retournant plusieurs résultats dans liste déroulante.
    Par Yann56 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/01/2010, 01h49
  2. [AJAX] recuperer plusieurs valeurs dans une fonction
    Par tortue_22 dans le forum AJAX
    Réponses: 4
    Dernier message: 17/05/2009, 13h48
  3. Réponses: 0
    Dernier message: 12/12/2008, 12h33
  4. Exporter plusieurs résultats dans un fichier
    Par alexping77 dans le forum SAS STAT
    Réponses: 12
    Dernier message: 10/02/2008, 22h50
  5. Plusieurs résultats dans une même cellule
    Par luboyoyo dans le forum Excel
    Réponses: 2
    Dernier message: 04/06/2007, 08h39

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