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] Parser du XML


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut [AJAX] Parser du XML
    Je n'arrive pas à lister les films et leur code de cette arborescence XML
    Mon document xml crée via ajax est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <MesFilms>
    <Film>
    <Nom>Ok Coral</Nom>
    <Code>59</Code>
    </Film>
    <Film>
    <Nom>Blue Star</Nom>
    <Code>60</Code>
    </Film>
    </MesFilms>
    J'affiche bien le contenu texte du document et le nombre de noeuds mais j'obtiens undefined ou autre messages d'erreurs pour l'affichage de reponse.


    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
    <SCRIPT TYPE="text/javascript" LANGUAGE="Javascript"> 
    var text=document.getElementById("ID_films");
    function reponse (transport){
     
    		var docXML=transport.responseXML;
    		var docText=transport.responseText;
    		alert("Document : \n\n" + docText);
    		var nbfils = docXML.firstChild.childNodes.length;
    		alert("Nombre de noeuds fils = " + nbfils);
     
    		var reponse = "";
    		for ($i=0; $i<nbfils; $i++) {
    			if ($i != 0) reponse += "\n";
    			reponse += docXML.childNodes[0].childNodes[$i].value;	
                  }
     
                  alert(reponse);
    Merci pour votre aide

  2. #2
    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
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var nbfils = docXML.firstChild.childNodes.length;
    Attention, à part IE, les navigateurs interprètent les sauts de ligne comme des noeuds, donc dans ton code, docXML.firstChild et un retour chariot et n'a donc pas de noeud enfant !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    ... donc traitement sur le server ou côté client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var docText=transport.responseText;
    docText=docText.replace(/>\s+</g, "><");
     
    ... et tu crées docXML à partir du nouveau docText
    ERE

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut
    Alors là je suis completement perdu

    Voici ci-dessous le code complet de mon appli.

    Cela fonctionne correctement sous Firefox mais pas sous IE
    Si je mets un alert(nbfils), je trouve un nombre correct pour Firefox mais la valeur 0 pour IE. Problemes de noeuds, espaces sous IE mais je n'arrive pas à corriger...

    Mon code :

    On saisis un nom de ville et à partir de la troisième lettre, et pour chaque caractère frappé, on appelle la fonction alors() qui en ajax interroge une table de codes postaux. Un fichier xml est généré puis parsé sur le client pour extraction du code postal. (Il y a plus simple, mais c'est exercice imposé )

    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
    26
    27
    28
    29
    30
    31
    32
    <script type="text/javascript" src="prototype.js"></script>
    <input type="text" id="ID_VILLE" value="" name="nom" />
    <SCRIPT TYPE="text/javascript" LANGUAGE="Javascript"> 
    var text=document.getElementById("ID_VILLE");
    function reponse (transport){
     
    		var docXML=transport.responseXML;
    		var nbfils = docXML.firstChild.childNodes.length;
    		var reponse = "";
    		for ($i=0; $i<nbfils; $i++) {
    			if ($i != 0) reponse += "\n";
    			reponse += docXML.firstChild.childNodes[$i].childNodes[0].childNodes[0].nodeValue+'<br>';		
    	}
    document.getElementById("codes").innerHTML=reponse;
    } 
     
    function alors() { 
    	new Ajax.Request('hello.php',{
    			method:'get',
    			parameters: {nom : document.getElementById("ID_VILLE").value},
    			onSuccess: reponse,
    			onFailure:function (){ alert("le fichier hello.php n'existe pas")}
    			});
      } 
    text.onkeyup=function(){
        if(text.value.length>2){
            alors();
        }
    }
    </SCRIPT>
    <p>Codes Postaux<p/>
    <div id="codes"></div>
    et hello.php

    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
    <?php
    if (isset($_GET['nom'])) 
       $nom=$_GET['nom'];
    else echo "Passer un nom en parametre";
     
    $connexionDB=mysql_connect("localhost","root","");
    mysql_select_db("codes_postaux")or die('Erreur de selection '.mysql_error());
    $sql = 'SELECT `code`, `ville` FROM `codes_postaux` WHERE `ville` LIKE \''.$nom.'%\'';
    $resultat=mysql_query($sql) or die('Erreur de requête '.mysql_error());
     
    $tmp='<LesVilles>';
    while ($row = mysql_fetch_assoc($resultat)) {
    $ville=$row['ville'];
    $code=$row['code'];
    $tmp = $tmp ."<Ville><Code>".$code."</Code><Nom>".$ville."</Nom></Ville>";
    }
    $tmp = $tmp ."</LesVilles>";
     
    header('Content-type: text/xml');
    $xml = simplexml_load_string($tmp);
    echo $xml->asXML();
    mysql_close($connexionDB);
    ?>
    Tout cela fonctionne merveilleusement bien avec un onkeyup sur Firefox mais pas sous IE
    Le unkeypress ne fonctionne pas ds les 2 navigateurs.

Discussions similaires

  1. parser un xml en retour d'ajax JQuery
    Par Tux1 dans le forum jQuery
    Réponses: 6
    Dernier message: 27/12/2011, 14h58
  2. [C#] Parser du XML
    Par karl3i dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/02/2009, 09h46
  3. [AJAX] Parser le XML
    Par matoon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/04/2008, 09h41
  4. [AJAX] Parser un fichier XML
    Par namstou3 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2007, 11h40
  5. [AJAX] [Ajax + PHP + XML] Parser le XML
    Par Dolerho dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/11/2006, 07h43

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