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] Insertion de XHTML avec AJAX


Sujet :

AJAX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut [AJAX] Insertion de XHTML avec AJAX
    Bonjour

    Je souhaite, dans une page en xhtml ajouter un bloc Xhtml qui m'est transmit par une requête Ajax. J'utilise le code suivant mais mal grès que le bloc ajouté apparaisse dans le code source de la page et dans Firebug. Il n'est pas "formaté".

    Voici la page HTML devant être modifiée.

    Code xhtml : 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
     
    <body>
        <div id="corpsPage">
            <fieldset>
                <legend>Sélection</legend>
                 <p>
                        <select name="employees" id="employees">
                            <option value="ROBERT Marcel">ROBERT Marcel</option>
                            <option value="ELOISE Lecroix">ELOISE Lecroix</option>
                            <option value="LEBRETON">LEBRETON</option>
                        </select>
                </p>
            </fieldset>
            <div id="informationsProfessionnelles">
                <p>TEST</p>
            </div>
        </div>
    </body>

    Et voilà le code exécutant la requête Ajax:

    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
     
        var xhr = null;
        xhr = getXhr();
        xhr.onreadystatechange = function() {
            try {
                    if(xhr.readyState == 4 && xhr.status == 200) {
                        var tmp = xhr.responseXML.getElementsByTagName("fieldset");
                        var element = document.getElementById("informationsProfessionnelles");
                            element.appendChild(tmp.item(0));
                    }
            }
            catch(e) {
                alert("Exception: " + e);
            }
        }
        xhr.open("POST", "xmlEmployee.xml", true);
        xhr.send(null);
    Le code XML devant être inséré.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <root>
    	<fieldset id="informationsProfessionnelles">
    		<legend>Informations professionnelles</legend>
    		<p>
    			Paragraph
    		</p>
    	</fieldset>
    </root>

    Et le rendu final.



    Le rendu que j'obtiens lorsque j'ajoute le code à la mano est le suivant:



    Les noeuds ne sont pas du bon type. Que puis-je faire pour réaliser ce que je veux: réutiliser du code XHTML dans ma page.

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut
    salut,

    je ne sais pas si ça peut t'aider, moi je n'envoie pas les données de la même manière :
    avec mootools pour l'ajax, et ensuite dans ton code xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <root>
    	<fieldset id="informationsProfessionnelles">
    		<legend>Informations professionnelles</legend>
    		<p>
    			Paragraph
    		</p>
    	</fieldset>
    </root>
    je ne mets pas les balises xml et root, d'ailleurs si tu peux m'expliquer je dormirais moins con , parce que moi j'envoie des requetes html avec mootools, mais dans la console d'erreurs ff, il me dit "mal formé ... <root>...</root> ...", donc ça a peut-être quelque chose à voir

    Enfin tout ça pour dire que moi à la fin de ma page récupérée (c'est du php mais l'esprit est le même), je mets &nbsp;, et j'ai longtemps galeré à cause de la mise en forme css des requêtes ajax mais avec ça, ça marche

    J'espère que ça va t'aider

  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
    Salut,

    Les noeuds ne sont pas du bon type. Que puis-je faire pour réaliser ce que je veux: réutiliser du code XHTML dans ma page.
    Effectivement. N'oublie pas que tu manipules du XML et pas du HTML. Donc tu dois indiquer le namespace qui porte les noeuds fieldset et autres.
    Je ne sais pas quelle XHTML tu utilises mais ta structure XML devrait ressembler à celà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    	<fieldset xmlns="http://www.w3.org/1999/xhtml" id="informationsProfessionnelles2">
    		<legend>Informations professionnelles</legend>
    		<p>
    			Paragraph
    			<input type="text" name="test" value="OK" />
    		</p>
    	</fieldset>
    </root>
    Et attention aux id car il sont dupliqués dans ton code initial.

    Bon dev,


    ERE

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Citation Envoyé par nicols Voir le message
    salut,

    je ne sais pas si ça peut t'aider, moi je n'envoie pas les données de la même manière :
    avec mootools pour l'ajax, et ensuite dans ton code xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <root>
    	<fieldset id="informationsProfessionnelles">
    		<legend>Informations professionnelles</legend>
    		<p>
    			Paragraph
    		</p>
    	</fieldset>
    </root>
    je ne mets pas les balises xml et root, d'ailleurs si tu peux m'expliquer je dormirais moins con , parce que moi j'envoie des requetes html avec mootools, mais dans la console d'erreurs ff, il me dit "mal formé ... <root>...</root> ...", donc ça a peut-être quelque chose à voir

    Enfin tout ça pour dire que moi à la fin de ma page récupérée (c'est du php mais l'esprit est le même), je mets &nbsp;, et j'ai longtemps galeré à cause de la mise en forme css des requêtes ajax mais avec ça, ça marche

    J'espère que ça va t'aider
    <?xml version="1.0" encoding="UTF-8"?> Cette ligne décrit la version XML utilisée et l'encodage.

    Pour qu'un Document XML soit bien formé il faut, notamment, que l'ensemble des balises soient "encadrées" par un éléments racine. Le nom n'a pas d'importance.

    Citation Envoyé par emmanuel.remy Voir le message
    Salut,



    Effectivement. N'oublie pas que tu manipules du XML et pas du HTML. Donc tu dois indiquer le namespace qui porte les noeuds fieldset et autres.
    Je ne sais pas quelle XHTML tu utilises mais ta structure XML devrait ressembler à celà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    	<fieldset xmlns="http://www.w3.org/1999/xhtml" id="informationsProfessionnelles2">
    		<legend>Informations professionnelles</legend>
    		<p>
    			Paragraph
    			<input type="text" name="test" value="OK" />
    		</p>
    	</fieldset>
    </root>
    Et attention aux id car il sont dupliqués dans ton code initial.

    Bon dev,

    ERE
    Génial c'est tout à fait ce qu'il me fallait.
    Merci beaucoup.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Heu je crois que je me suis avancé trop vite.

    Si la méthode fonctionne avec Firefox, elle ne marche pas avec IE6 qui me donne l'erreur: "Cette interface n'est pas prise en charge.", lorsque je tente d'ajouter le noeud XML au noeud xhtml.

  6. #6
    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
    Citation Envoyé par Anonymouse Voir le message
    Heu je crois que je me suis avancé trop vite.

    Si la méthode fonctionne avec Firefox, elle ne marche pas avec IE6 qui me donne l'erreur: "Cette interface n'est pas prise en charge.", lorsque je tente d'ajouter le noeud XML au noeud xhtml.
    Effectivement IE (toute version) a un bug à ce niveau. Dans ce cas, tu n'as pas d'autre solution que d'analyser le document xml et de regénérer les mêmes noeuds dans le HTML cible ou bien plus simple, d'effectuer un innerHTML.

    Dommage, ce n'est plus aussi élégant !

    ERE

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Effectivement IE (toute version) a un bug à ce niveau. Dans ce cas, tu n'as pas d'autre solution que d'analyser le document xml et de regénérer les mêmes noeuds dans le HTML cible ou bien plus simple, d'effectuer un innerHTML.

    Dommage, ce n'est plus aussi élégant !

    ERE
    J'ai tenté la première solution: régénérer les mêmes noeuds dans le HTML cible mais impossible de récupérer les attributs des noeuds.

    Je crée donc un noeud vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "document.createElement("div")"
    dans lequel j'affecte ma responseText avec la propriété innerHTML. Je récupère ensuite le fils que je veux ajouter. Mais maintenant mon CSS foire

    Vive IE , et merci de ton aide.

  8. #8
    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
    Mais maintenant mon CSS foire
    Tu veux dire que quand tu appliques ton innerHTML sur le fieldset les CSS ne s'appliquent pas ?

    ERE

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut
    C'est là que moi je te disais que ça me faisait pareil : les CSS ne s'appliquaient pas.
    Et j'ai trouvé une solution qui a l'air de marcher pour moi : tu mets un '&nbsp;' à la fin de ce que tu as à insérer. Ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    	<fieldset xmlns="http://www.w3.org/1999/xhtml" id="informationsProfessionnelles2">
    		<legend>Informations professionnelles</legend>
    		<p>
    			Paragraph
    			<input type="text" name="test" value="OK" />
    		</p>
    	</fieldset>
    	&nbsp;
    </root>

  10. #10
    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
    @Anonymouse: essaie avec ce que propose nicols, les voix de l'informatique sont parfois impénétrables !

    Merci Anonymouse

    ERE

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Tu veux dire que quand tu appliques ton innerHTML sur le fieldset les CSS ne s'appliquent pas ?

    ERE
    Au final j'utilise le noeud que j'ai créé (un fieldset) pour en remplacer un autre (fieldset également). Ces fieldset ont une .

    Quand je remplace le noeud le CSS de margin ne s'applique plus.

    J'ai testé la solution de nicols qui ne fonctionne malheureusement pas.

    En plus comme j'utilise une feuille de style externe impossible de recopier les attributs style de l'ancien noeud vers le nouveau noeud.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Par défaut
    Citation Envoyé par Anonymouse Voir le message
    Au final j'utilise le noeud que j'ai créé (un fieldset) pour en remplacer un autre (fieldset également). Ces fieldset ont une .

    Quand je remplace le noeud le CSS de margin ne s'applique plus.

    J'ai testé la solution de nicols qui ne fonctionne malheureusement pas.

    En plus comme j'utilise une feuille de style externe impossible de recopier les attributs style de l'ancien noeud vers le nouveau noeud.
    Le problème est résolu. J'avais une image vide dans mon fildset et il faisait sauter la marge à cause ça.

  13. #13
    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
    Le problème est résolu. J'avais une image vide dans mon fildset et il faisait sauter la marge à cause ça
    Je préfère ça parce que je ne voyais pas trop d'où cela pouvait venir !

    ERE

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/02/2014, 10h44
  2. insertion de données avec ajax
    Par nana_md dans le forum jQuery
    Réponses: 6
    Dernier message: 02/08/2013, 17h06
  3. [AJAX] Listes déroulantes liées avec Ajax
    Par paupiette dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/08/2006, 16h51
  4. [AJAX] Modifier avec AJAX une image générée avec GD
    Par thsantac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/03/2006, 19h34

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