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 :

[AJAX] Fonctionnement Ajax


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Par défaut [AJAX] Fonctionnement Ajax
    Bonjour à tous,

    Premier post et déjà un problème (je précise que j'ai parcouru le forum et les tuto avant de poster... pas à 100% ça serait trop long mais de façon efficace quand même je pense).

    Je suis entrain de créer un script et j'ai un problème avec le retour des données extraites d'un fichier xml.

    Voici mon code :

    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 existence(chemin,fichier,creation){
      var xhr=creation_xhr();
      if(xhr){
        xhr.onreadystatechange=function(){
          if(xhr.readyState==4 && xhr.status==200){
            var xml=xhr.responseXML;
           /* Eléments problématiques : */
            alert(xml.getElementsByTagName("texte")[0].firstChild.nodeValue);
           /* N'affiche que dalle */
          }
        }
        xhr.open("POST","existence.php",true);
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        xhr.send("chemin="+chemin+"&fichier="+fichier+"&creation="+creation);
      }
    }
    Le fichier existence.php se contente de faire un echo (pour le test en tous cas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $chemin=$_POST["chemin"]; /* Idem $fichier et $creation */
     
    echo "<?xml version=\"1.0\" encoding=\"ISO-8955-15\" ?>
    <racine>
    <texte>Le fichier $chemin$fichier a été crée.</texte>
    </racine>";
    La fonction creation_xhr() crée l'objet xhr, et fonctionne.

    Le problème c'est que mon alert n'affiche rien du tout :
    - J'ai fait le test en modifiant le responseXML par un responseText et un alert sur l'objet xml retourné ce qui affiche bien le contenu du echo sans erreur.
    - J'ai fait le test avec xml.nodeType, ce qui me donne 9, soit un noeud de type document, mais dés que je descend dans l'arborescence plus rien.
    - Un getElementsByTagName("texte").length me retourne 0, ce qui n'est pas normal.

    Pas mal de tutos traitent de la transmission à l'aide de la méthode GET mais très peu de la méthode POST. Le problème peux t-il venir de là? Quelqu'un aurait une idée? Merci par avance.

  2. #2
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    As-tu essayé sous IE et sous FF ?

    Les deux ne genere pas tout à fait l'arbre DOM d'un document XML de la même façon...

    J'avais eu le problème, depuis j'utilise ces deux fonctions (récupérées sur je sais plus quel site) :

    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
        function xmlCleanup(d)
        {
            var bal=d.getElementsByTagName('*');
     
            for(i=0;i<bal.length;i++)
            {
                a=bal[i].previousSibling;
                if(a && a.nodeType==3) xmlClean(a);
                b=bal[i].nextSibling;
                if(b && b.nodeType==3) xmlClean(b);
            }
     
            return d;
        }
     
        function xmlClean(c)
        {
            if(!c.data.replace(/\s/g,'')) c.parentNode.removeChild(c);
        }
    De cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (xhr_object.readyState == 4)
    {
      var reponseXML = xmlCleanup(xhr_object.responseXML);
      ....
    }
    En fait, la fonction xmlCleanup "nettoie" l'arbre XML en supprimant les noeuds et les noeuds qui servent à rien, (c'est un truc du genre les retours chariot et les espaces considérés comme des noeuds dans IE ou dans FF)

  3. #3
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par Smiff Voir le message
    - Un getElementsByTagName("texte").length me retourne 0, ce qui n'est pas normal.

    Pas mal de tutos traitent de la transmission à l'aide de la méthode GET mais très peu de la méthode POST. Le problème peux t-il venir de là? Quelqu'un aurait une idée? Merci par avance.
    Rien à voir avec GET ou POST.

    Sinon, essaye avec :
    au lieu de travailler directement sur xml.
    Ca arrive sur IE et FFx?

    Citation Envoyé par buzzkaido Voir le message
    As-tu essayé sous IE et sous FF ?

    Les deux ne genere pas tout à fait l'arbre DOM d'un document XML de la même façon...

    (c'est un truc du genre les retours chariot et les espaces considérés comme des noeuds dans IE ou dans FF)
    http://javascript.developpez.com/faq...M#DOMIEFirefox

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Par défaut
    Merci pour vos réponse

    Je connais effectivement la différence entre Ie et Firefox concernant la gestion des Dom (j'ai tuyauté un petit nouveau (plus que moi, si si c'est possible ) à ce sujet).
    Mon code ne fonctionne dans aucun de ces deux navigateurs.

    > buzzkaido : Je possède aussi un code de ce type mais le tient va me permettre de l'étoffer

    > denisC : J'ai essayé avec Element à la place de Elements mais ça ne fonctionne pas et je suis à peu près sûr que c'est Elements pour TagName, Element étant généralement utilisé pour Id.

    Si vous avez d'autres idées je suis prenneur. En fait je n'arrive à lire aucun fichier Xml dès que j'utilise le post (j'ai pris note de ta remarque néanmoins denisC), dés que je le transforme en get celà fonctionne à merveille. Le problème c'est que je ne veux surtout pas voir les infos transmises à travers l'url.

    Note : Quelqu'un a-t'il supprimé les deux messages précédents? J'ai l'impression d'avoir répondu à quelqu'un qui m'accusait de multi-post.

    Bonne soirée,

  5. #5
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par Smiff Voir le message
    > denisC : J'ai essayé avec Element à la place de Elements mais ça ne fonctionne pas et je suis à peu près sûr que c'est Elements pour TagName, Element étant généralement utilisé pour Id.
    Je disais, utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xml.documentElement.getElementsByTagName("texte").length
    Citation Envoyé par Smiff Voir le message
    Si vous avez d'autres idées je suis prenneur. En fait je n'arrive à lire aucun fichier Xml dès que j'utilise le post (j'ai pris note de ta remarque néanmoins denisC), dés que je le transforme en get celà fonctionne à merveille.
    Ca c'est bizarre. Tu as testé ta page PHP en POST (en faisant un formulaire bidon te permettant d'acceder à cette page)? Normalement, ça ne devrait rien changer.... Tu recuperes correctement les variables du coté PHP?

    Citation Envoyé par Smiff Voir le message
    Note : Quelqu'un a-t'il supprimé les deux messages précédents? J'ai l'impression d'avoir répondu à quelqu'un qui m'accusait de multi-post.
    Accusation infondée (du moins c'est mon jugement) et je suis modérateur, donc messages supprimés sans préavis : ça n'apporte pas grand chose de constructif à cette discussion

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Par défaut
    > denisC : Ok, je vais essayer le xml.documentElement... enfin demain... là dodo je laisserai un post pour tenir au courant.

    Pour la page php aucun problème avec les variables en fait si je récupère le contenu fourni par php avec un responseText et que je l'affiche dans un alert() j'ai bien un document xml valide contenant bien les variables passées en paramètre.

    Accusation infondée je me disais aussi, la réponse m'avait parue étrange, merci de faire le ménage

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Par défaut
    Bon, problème réglé...

    A ajouter dans le fichier php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Type: text/xml");
    Tout simplement...

    Merci aux gens qui m'ont répondus pour leur aide

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

Discussions similaires

  1. [AJAX] Fonctionnement avec IE
    Par mewax dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/01/2007, 14h46
  2. [AJAX] Ajax fonctionne sur onblur mais pas sur onkeypress
    Par julien.63 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/01/2007, 15h14
  3. [AJAX] Code tuto Ajax fonctionne pas sous FF, mais IE et OP sont OK
    Par hugo69 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 08/01/2007, 21h27
  4. [AJAX] Script ajax ne fonctionne pas sur IE :( !
    Par Funattitude dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/08/2006, 18h02
  5. [AJAX] fonctionnement Ajax probleme
    Par Tempotpo dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/06/2006, 15h00

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