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] Utilisation de responseXml


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut [AJAX] Utilisation de responseXml
    Bonjour,

    Je devéloppe une application J2EE avce Eclipse.

    J'ai une page HTML qui utilie Ajax pour envoyer une requête au serveur de manière asynchrone.

    De cette requête, le serveur me renvoie un document xml qui représente en fait un <div> avec un bouton à l'intérieur.

    Réponse renvoyée par les serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div id='conteneur'>
           <input type='button' value='Bonjour' />
    </div>
    Le problème, c'est que je voudrais insérer ce <div> dans ma page.

    Je récupère mon document xml par le biais de la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var xmldoc = req.responseXml
    mais ensuite je ne sais pas comment faire pour insérer le <div> dans un autre <div>.

    J'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var xmldoc = req.responseXml
    document.getElementById('divCorps').appendChild(xmldoc);
    mais IE me renvoie une erreur javascript : "Cette interface n'est pas prise en charge". C'est bien la première fois que j'ai cette erreur-là !

    Quequ'un a-t-il une réponse ou un avis sur la question ?
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    ton div cible, il a bien un Id ?

    si c'est le cas, un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.getElementById('divCorps').innerHTML =xmldoc
    devrait suffire, non ?
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Oui ca, ca marche sauf qu'il ne faut pas utiliser req.responsesXml mais req.responsesText.

    Le problème est que le innerHTML remplace tout ce qui est contenu dans le <div>. Moi je ne veux pas remplacer ce qui est contrenu dans le <div> mais ajouter d'autres éléments.

    C'est pour cela que j'ai pensé à la méthode appendChild(object) mais je ne connait pas les limites de celle-ci.

    Par exemple j'utilise souvent ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var unDiv = document.createElement("div");
    unDiv.setAttribute("id","div1");
    ...
    document.appendChild(unDiv);
    et ca marche très bien !

    Mais là je pars d'une variable Objet (req.responsesXml) ou d'une chaine de caractères(req.responsesText) et à partir de ces variables, je ne sais pas quoi passer en paramètre à la méthode appendChild() pour ne pas avoir cette erreur "Cette interface n'est pas prise en charge" ?
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

  4. #4
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    mes excuses alors
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  5. #5
    Expert éminent

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par danyboy85
    Le problème est que le innerHTML remplace tout ce qui est contenu dans le <div>. Moi je ne veux pas remplacer ce qui est contrenu dans le <div> mais ajouter d'autres éléments.
    Facile à contourner, en faisant simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monElement.innerHTML += "nouveau texte ave <balises>....";
    Citation Envoyé par danyboy85
    C'est pour cela que j'ai pensé à la méthode appendChild(object) mais je ne connait pas les limites de celle-ci.
    Fonction du DOM, ce n'est pas un object que tu appendes, mais un noeud DOM.

    Citation Envoyé par danyboy85
    Mais là je pars d'une variable Objet (req.responsesXml) ou d'une chaine de caractères(req.responsesText) et à partir de ces variables, je ne sais pas quoi passer en paramètre à la méthode appendChild() pour ne pas avoir cette erreur "Cette interface n'est pas prise en charge" ?
    Ca ne marche pas, parcequ'un noeud appartient de façon inaltérable (d'après la norme DOM) à son document. Donc, en DOM, tu ne peux insérer un noeud d'un document dans un autre. Et la, tu essayes d'insérer le document en entier dans un autre document.

    Les solutions:
    • La plus simple : cf ci dessus (innerHTML)
    • La plus DOM : Il faut recopier les noeuds un par un (l'ensemble du contenu des noeuds). En résumé, tu veux insérer sans aucune modif, tu prends la permière solution

  6. #6
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Merci beaucoup pour ta réponse. En effet le innerHTML fonctionne très bien mais lorsque ma page contient beaucoup d'éléments, le temps de réponse peut être parfois long.

    C'est donc pour cela que j'aurais souhaité utiliser le appendChild qui ne fait qu'ajouter un noeud à l'arborescenbce du DOM.

    Mais bon avec les (très bonnes) explications que tu m'a donné, il est clair que le innerHTML reste la meilleure solution.

    Je considère donc que le problème est résolu. Merci à titoumimi et à denisC
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

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

Discussions similaires

  1. [AJAX] Principe de responseXML et fonction callback
    Par ozdoz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/10/2006, 22h14
  2. [AJAX] utilisation de AjaxTag
    Par zola dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/04/2006, 22h01
  3. [AJAX] Utilisation AJAX
    Par topolino dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2006, 09h30
  4. [AJAX] Utilisation AJAX
    Par illegalsene dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/01/2006, 11h55
  5. Utilisation de responseXml
    Par Laure888 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/01/2006, 11h40

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