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

JavaScript Discussion :

[DOM] DOM XML, ne marche pas sous Firefox


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut [DOM] DOM XML, ne marche pas sous Firefox
    Bonjour,

    Voila j'ai un bout de code simple qui normalement devrait bien fonctioner sur IE et FF, mais malheureusement cela ne marche pas, alors peut être pourriez vous m'aidez,

    Voila le code du fichier XML (simple) Fichier : annuaire.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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE annuaire SYSTEM "annuaire.xsd">
    <annuaire>
        <personne>
            <denomination>
                <nom>toto</nom>
                <prenom>tata</prenom>
            </denomination>
            <adresse>
                <telephone>
                    <fixe>00.00.00.00.00.</fixe>
                    <portable>00.00.00.00.00.</portable>
                </telephone>
                <rue numero="10">henri</rue>
                <ville>xxxx</ville>
                <code>12345</code>
            </adresse>
        </personne>
        <personne>
            <denomination>
                <nom>titi</nom>
                <prenom>tutu</prenom>
            </denomination>
            <adresse>
                <telephone>
                    <fixe>00.00.00.00.00.</fixe>
                    <portable>00.00.00.00.00.</portable>
                </telephone>
                <rue numero="10">henri</rue>
                <ville>xxxx</ville>
                <code>123456</code>
            </adresse>
        </personne>
    </annuaire>
    le XSD : (annuaire.xsd)

    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
    33
    34
    35
    36
    37
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <element name="annuaire" xmlns="http://relaxng.org/ns/structure/1.0">
        <oneOrMore>
            <element name="personnes">
                <element name="denomination">
                    <element name="nom">
                        <text/>
                    </element>
                    <element name="prenom">
                        <text/>
                    </element>
                </element>
                <element name="adresse">
                    <element name="telephone">
                        <element name="fixe">
                            <text/>
                        </element>
                        <element name="portable">
                            <text/>
                        </element>
                    </element>
                    <element name="rue">
                        <attribute name="numero">
                            <text/>
                        </attribute>
                        <text/>
                    </element>
                    <element name="ville">
                        <text/>
                    </element>
                    <element name="code">
                        <text/>
                    </element>
                </element>
            </element>
        </oneOrMore>
    </element>
    et enfin le Java : (fichier HTML)

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script language="javascript" src="writeResult.js"
          type="text/javascript">
    </script>
     
    <script language="javascript" src="submitFormNom.js"
          type="text/javascript">
    </script>
     
        <title></title>
    </head>
     
    <body>
        <form method="post"
              name="ajax"
              action="#"
              id="ajax">
     
            Nom : <input type="text"
                  name="rechercheNom"
                  value="NOM" />
            <input type="BUTTON"
                  value="Submit"
                  onclick="submitFormNom()" />
     
            Prénom : <input type="text"
                  name="recherchePrenom"
                  value="PRENOM" />
            <input type="BUTTON"
                  value="Submit"
                  onclick="submitFormPrenom()" />
        </form>
        <div id="resultats">
     
        </div>
    </body>
    </html>
    (fichier submitFormNom.js)

    Code javascript : 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
    59
    60
    function submitFormNom()
    { 
    document.getElementById("resultats").innerHTML = "";
         var xhr; 
        try {  
            xhr = new ActiveXObject('Msxml2.XMLHTTP');   
        }
        catch (e) {
            try {   
                xhr = new ActiveXObject('Microsoft.XMLHTTP');    
            }
            catch (e2) {
                try {  
                    xhr = new XMLHttpRequest();     
                }
                catch (e3) {  
                    xhr = false;   
                }
            }
        }
     
        xhr.onreadystatechange  = function() { 
             if(xhr.readyState  == 4) {
                  if(xhr.status  == 200) {
                    var preparation = '<table border="1"><tr>';
                    preparation += '<td rowspan="2">Nom</td>';
                    preparation += '<td rowspan="2">Prénom</td>';
                    preparation += '<td rowspan="2">Adresse</td>';
                    preparation += '<td colspan="2">telephone</td>';
                    preparation += '</tr><tr>';
                    preparation += '<td>Fixe</td>';
                    preparation += '<td>Portable</td>';
                    preparation += '</tr></table>';
                    document.getElementById("resultats").innerHTML = preparation;
     
                    var doc = xhr.responseXML;
                    var root = doc.getElementsByTagName('annuaire').item(0); 
                    var personne = root.firstChild;
                    var nom = personne.getElementsByTagName('nom').item(0);
                    var recherche = document.ajax.rechercheNom.value.toLowerCase();
                    if (nom.firstChild.nodeValue.toLowerCase().match(recherche) == recherche) {
                        writeResultat(personne);
                    }
                        while(personne.nextSibling != null) {
                            personne = personne.nextSibling;
                            var nom = personne.getElementsByTagName('nom').item(0);
                            if (nom.firstChild.nodeValue.toLowerCase().match(recherche) == recherche) {
                                    writeResultat(personne);
                            }
                        }
                    }
                  else {
                    //document.ajax.dyn.value="Error code " + xhr.status;
                }
             }
        }; 
     
       xhr.open( "GET", "annuaire.xml",  true); 
       xhr.send(null); 
    }
    (fichier writeResult.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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    function writeResultat(personne) {
        var xhr;
     
        try {  
            xhr = new ActiveXObject('Msxml2.XMLHTTP');   
        }
        catch (e) {
            try {   
                xhr = new ActiveXObject('Microsoft.XMLHTTP');    
            }
            catch (e2) {
                try {  
                    xhr = new XMLHttpRequest();     
                }
                catch (e3) {  
                    xhr = false;   
                }
            }
        }
     
        xhr.open( "GET", "annuaire.xml",  true); 
        xhr.send(null);
     
        var doc = xhr.responseXML;    
        var nom = personne.getElementsByTagName('nom').item(0);
        var prenom = personne.getElementsByTagName('prenom').item(0);
        var fixe = personne.getElementsByTagName('fixe').item(0);
        var portable = personne.getElementsByTagName('portable').item(0);
        var rue = personne.getElementsByTagName('rue').item(0);
        var ville = personne.getElementsByTagName('ville').item(0);
        var code = personne.getElementsByTagName('code').item(0);
        var numero = personne.getElementsByTagName('rue').item(0).getAttribute('numero');
     
     
        var resultat = '<table><tr>';
            resultat += '<td>' + nom.firstChild.nodeValue + '</td>';
            resultat += '<td>' + prenom.firstChild.nodeValue + '</td>';
            resultat += '<td>' + numero + ' ' + rue.firstChild.nodeValue + ' ' + code.firstChild.nodeValue + ' ' + ville.firstChild.nodeValue + '</td>';
            resultat += '<td>' + fixe.firstChild.nodeValue + '</td>';
            resultat += '<td>' + portable.firstChild.nodeValue + '</td></tr></table>';
     
            document.getElementById("resultats").innerHTML += resultat;
    }

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Points : 430
    Points
    430
    Par défaut
    Je pense qu'un description de ce que tu veux faire ainsi de ce qui ne fonctionne pas ferait gagner du temps à tout le monde, car la tu as quand même inséré 5 bouts de codes, sans même dire ce qui ne fonctionnait pas.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ce que je veu faire : un annuaire (je m'auto-exerce au XML DOM) j'ai donc 2 contact dans un fichier XML, 1 fonction de recherche par nom (submitFormNom) dans un fichier JS une fonction d'affichage (writeResult) dans un autre fichier JS et un fichier HTML permettant de joindre tous les bouts ^^

    Ce qui ne marche pas : Rien tous fonctione, enfin sous IE, sous Firefox rien ne s'affiche, même pas le formulaire j'ai l'impression que c'est mon XMLHttpRquest qui ne passe pas mais je ne peu pas en etre sur alors je vous demande de l'aide

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Points : 430
    Points
    430
    Par défaut
    En effet, j'ai l'impression que ton xhr ne fonctionne que sous IE

    Voila ce que j'utilise généralement, compare avec le tien mais il me semble qu'il manque un morceau.

    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
    function getXMLHTTP(){
      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) {
          try {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e1) {
            xhr = null;
          }
        }
      }
      else { // XMLHttpRequest non supporté par le navigateur
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
      }
      return xhr;
    }
    Bon courage

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Malheureusement meme avec ton code cela ne marche toujours pas j'ai mit en ligne pour ceux que sa interesse : http://www.gputech.com/XML/annuaire.html

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var doc = xhr.responseXML;    
        var nom = personne.getElementsByTagName('nom').item(0);
        var prenom = personne.getElementsByTagName('prenom').item(0);
        var fixe = personne.getElementsByTagName('fixe').item(0);
        var portable = personne.getElementsByTagName('portable').item(0);
        var rue = personne.getElementsByTagName('rue').item(0);
        var ville = personne.getElementsByTagName('ville').item(0);
        var code = personne.getElementsByTagName('code').item(0);
        var numero = personne.getElementsByTagName('rue').item(0).getAttribute('numero');
    Tu définis la variable "doc", mais tu utilises "personne"...

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'avoue doc ne sert plus a rien dans cette fonction vu que j'envoie personne en paramètre je suis même pas sur de devoir reouvrir mon XML ^^

    mais sa n'empeche que sous IE sa marche... je comprend pas je fait pourtant tout comme j'ai appris

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Est-ce qu'il est possible que FF ne supporte pas la methode : getElementsByTagName("") ??

    parce que si je met un alert() juste avant cette methode il me l'affiche et juste après il ne me l'affiche plus.

    Enfin c'est pas claire tous ça il semble que cela ne viens pas de mon ouverture de fichier XML mais du javascript lui même.

    quelqu'un a une idée ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Points : 430
    Points
    430
    Par défaut
    Ce qui est étrange, c'est que sur autre post, j'ai lu Auteur qui écrivait :

    IE ne prend pas en charge les méthodes createAttribute, setAttributeNode, setAttribute, getAttribute (bref toutes les méthodes qui gèrent les attributs ).

    Et toi tu utilises un getAttribute, qui passe sous IE et ton code ne passe pas sous FF...

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par tusssss Voir le message
    Ce qui est étrange, c'est que sur autre post, j'ai lu Auteur qui écrivait :




    Et toi tu utilises un getAttribute, qui passe sous IE et ton code ne passe pas sous FF...
    et la plus grosse blague c'est que mon IE n'est pas a jour (càd IE 5 )

    mais en voyant sa sa semble normale : http://www.w3schools.com/dom/dom_element.asp XD très bonne source pour savoir ce qui suporter ou non...

    Aufaite sous FF chez vous il marche mon Code ? et sous IE ?

  11. #11
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var doc = xhr.responseXML;    
        var nom = personne.getElementsByTagName('nom').item(0);
        var prenom = personne.getElementsByTagName('prenom').item(0);
        var fixe = personne.getElementsByTagName('fixe').item(0);
        var portable = personne.getElementsByTagName('portable').item(0);
        var rue = personne.getElementsByTagName('rue').item(0);
        var ville = personne.getElementsByTagName('ville').item(0);
        var code = personne.getElementsByTagName('code').item(0);
        var numero = personne.getElementsByTagName('rue').item(0).getAttribute('numero');
    Tu définis la variable "doc", mais tu utilises "personne"...
    Commence déja par corriger comme te dit Bovino ...

    Edit : et il te manque également le onreadystatechange dans ta requete. Bref, regarde y a tête reposée, avec des tutos pour comprendre ce qu'il te manque ^^

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Commence déja par corriger comme te dit Bovino ...
    Je suis pas complètement nunuche (juste un peu) c'est pas comme si j'écoutais pas se que l'on me dit. je l'ai fait des que j'ai vu le message (en local seulement) et sa n'a rien résolu (malheureusement)

    Bref, regarde y a tête reposée, avec des tutos pour comprendre ce qu'il te manque ^^
    toujours pas plus nunuche qu'avant et plutot que m'envoyer vers des tutos tu pourrais m'aider non ? D'ailleurs des tutos j'en ai bouffer quelques uns et j'ai même eu des cours, problème le prof nous dit c'est normal que sa marche pas sous FF, c'est parce que sa marche soit sous IE soit sous FF mais jamais les deux en même tant (simpas la prof hein ??)

    Sinon pour le onreadystatechange je vais le rajouter mais a mon avis sa changera rien vu que cela marche sous IE, le problème ne me semble pas être la, pourquoi est-ce que il ne m'affiche pas mon alert si elle est placer après getElementsByTagNam() je pense que c'est sa mon vrai problème.
    De plus le onreadustatechange dont tu parle c'est dans la fonction writeResult qui ne s'exécute que après submitFormNom et mon problème avec les alert() c'est dans submitFormNom.
    comme si FF ne reconnaisser pas getElementsByTagName();

    Edit : j'ai oublier j'ai du nouveau le formulaire s'affiche sous FF mais ne retourne rien...
    Edit bis : sayez j'ai encore du nouveau : Console d'erreur de FF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur*: personne.getElementsByTagName is not a function
    Fichier Source*: http://www.gputech.com/XML/submitFormNom.js
    Ligne*: 39

  13. #13
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Stop la rage hein, c'est presque le we.

    Ton erreur la voila:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    personne.getElementsByTagName is not a function
    [Break on this error] var nom = personne.getElementsByTagName('nom').item(0);
    Parce que personne vaut "\n".

    Si tu veux accéder aux noeuds "personne", passe directement par un getElementsByTagName sur personne depuis la racine, pas par des item(index) depuis les noeuds parents.
    j'ai même eu des cours, problème le prof nous dit c'est normal que sa marche pas sous FF, c'est parce que sa marche soit sous IE soit sous FF mais jamais les deux en même tant (simpas la prof hein ??)
    Les mecs comme ca, c'est des collectors...

    Edit: utilise FireBug sous FF pour débugger, en 30s t'aurais trouvé ton erreur ^^

  14. #14
    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
    Parce que personne vaut "\n".
    Explication : la gestion des noeuds est différente selon FF et IE (et à priori, il semble que ce soit FF qui respecte les recommandations) en gros, dans ton exemple, pour FF, le retour chariot est un noeud mais pas pour IE d'où le message de DoubleU.
    Paradoxe : tu obtiens ce que tu veux sous IE alors que c'est lui qui "marche pas" !!!

Discussions similaires

  1. [AJAX] sondage marche pas sous firefox (lotus notes)
    Par watchabongo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/01/2008, 10h00
  2. drag and drop march pas sous firefox+joomla!
    Par tecap dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/10/2007, 10h16
  3. fonction redimensionnement marche pas sous firefox
    Par calitom dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/09/2007, 14h39
  4. le ValidationSummary ASP ne marche pas sous Firefox
    Par hokidoki dans le forum ASP.NET
    Réponses: 15
    Dernier message: 16/08/2007, 10h30
  5. Fonction qui ne marche pas sous FireFox
    Par Foudébois dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/11/2006, 14h35

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