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] xhr.responseXML et querySelector


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut [AJAX] xhr.responseXML et querySelector
    Bonjour à tous,

    Je débute en Ajax depuis quelques semaines seulement et j'ai développé mon appli sous Chrome.

    J'envoie une requette via XHR et mon serveur me renvoie un fichier xml que je reçois coté client via la propriété xhr.responseXML. Ensuite, j'envoie directement responseXML dans des fonctions de mon code javascript où quelque part, je fait des responseXML.querySelector('...').

    Sous chrome et firefox, tout fonctionne bien, sous IE(pourtant 9), ça ne fonctionne pas, il me dit que
    Erreur : L’objet ne gère pas la propriété ou la méthode « querySelector »
    Là, quelque peu perplexe, je regarde plus en détail sous Chrome le type de responseXML et je vois "Document". Sous InternetExplorer, le type est "IXmlDOMDocument2" ?!?

    Je suis perdu. Avais-je le droit d'utiliser querySelector sur ma responseXML ?

    Toute aide sera la bienvenue

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    Laissez moi reformuler mon problème :

    Sur plusieurs sites et/ou tutoriels, j'ai lu qu'il était possible de recevoir des données d'une requette XMLHttpRequest au format xml, ce qui était très pratique puisque l'on pouvait alors, lisais-je, manipuler "responseXML" exactement comme on manipule l'arborescence DOM du document.

    • Vrai sous Chrome et Firefox qui tous deux voient "responseXML" comme un document (en console, on voit xhr.responseXML = #document et document = #document). En réalité, en espionnant, on voit une différence :
      • le document est instance de HTMLDocument
      • responseXML est instance de Document
    • Faux sous IE9 qui voit responseXML à travers ce qui ressemble fort à une interface et qui est dénommé IXMLDOMDocument2


    Or, je suis bien ennuyé. En tant que #document, je peux faire des responseXML.querySelector('...'); qui s'avèrent redoutablement puissant et pratiques. Sous IE, IXMLDOMDocument2 ne me fournit pas cette méthode et je me retrouve coincé.

    Existe-t-il un moyen sous IE de passer d'un IXMLDOMDocument2 à un Document tel que "le" document de ma page web pour que mon code javascript puisse continuer à parser mon xml via querySelector ?

  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
    Billets dans le blog
    20
    Par défaut
    puisque l'on pouvait alors, lisais-je, manipuler "responseXML" exactement comme on manipule l'arborescence DOM du document.
    Ce n'est pas tout à fait exact (notamment le exactement).
    responseXML permet d'interpréter la réponse comme du XML (d'où son nom ) ce qui autorise à manipuler l'arborescence grâce au DOM XML, qui est un peu différent du DOM (x)HTML.

    Ensuite, pour ta question, non, il n'est pas possible de faire croire à IE qu'il s'agit de HTML et ainsi d'utiliser querySelector(), tu devras passer par d'autres méthodes pour manipuler le DOM.
    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

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    À noter que (comme d'habitude,) l'emploi de jQuery permet de se dédouaner de ce genre d'inconvénients.

    À mon sens, faire du JavaScript nu, c'est bien, pour savoir comment fonctionne la programmation sur pages webs, et comprendre pourquoi on veut y ajouter une surcouche comme jQuery.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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
    Par défaut
    Bonjour,

    Ensuite, pour ta question, non, il n'est pas possible de faire croire à IE qu'il s'agit de HTML et ainsi d'utiliser querySelector(), tu devras passer par d'autres méthodes pour manipuler le DOM.
    Utiliser le responseText et le parser ensuite avec DOMParser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var responseXML = (new DOMParser()).parseFromString(xhr.responseText, "text/xml");
    @jbat: regarde le lien plus haut pour instancier un DOMParser pour IE et les autres navigateurs.

    A+.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    • Bovino> Merci pour les explications. Très instructives.
    • thelvin> Merci pour les suggestions. J'y pense depuis quelques temps déjà et à vrai dire, j'avais commencé comme ça avant de me rétracter sur le javascript nu car justement, étant un grand débutant à cette époque, je n'arrivais plus à faire la distinction entre le Js nu et le JQuery. Je suis déjà plus à l'aise maintenant et je ne vais pas tarder à me replonger dans JQuery.
    • andry.aime> Merci, ta réponse à sollutionné mon problème. J'avais l'intuition qu'il fallait faire quelque chose comme ça (j'ai déjà fait ça dans d'autres langages), mais franchement, je ne savais pas du tout comment faire.



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

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/10/2008, 18h07
  2. [AJAX] XHR a usage unique?
    Par Gruik dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/10/2006, 10h42
  3. [AJAX] [XHR] encodage et accents
    Par mig87 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2006, 15h17
  4. [AJAX] xhr.responseText et comparaison
    Par Nexussmb dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/10/2006, 17h32
  5. [ajax] xhr.responseXML == null ?!
    Par XecTech dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/08/2006, 17h22

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