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] JavaScript, Ajax et XML


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [AJAX] JavaScript, Ajax et XML
    Bonjour

    Je commence a me taper la tete contre les murs la alors il est temps de poster.

    Mon probleme est simple. Je veux créer dynamiquement un noeud dans ma page web, ce noeud étant généré par un script PHP au travers d'une requete Ajax.

    Voici donc les étapes :
    - envoi de la requete Ajax
    - génération d'un document XML par PHP
    - récupération du XML par JavaScript grace à responseXML
    - ajout du noeud dans la page

    Ca marche trés bien mais le gros probleme est que les styles css défini dans une feuille de style ne s'appliquent pas au nouveau noeud créé dynamiquement.

    Le retour de PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="iso-8859-1"?>
    <?xml-stylesheet href="http://localhost/style.css" type="text/css"?>
    <ul id="content"><li class="roundt" id="li_content_1"><h1>xxx</h1><div class="text"><p>xxxx</p></div></li></ul>
    Le code javascript qui place le noeud :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var resxml=xhr.responseXML.documentElement;
    document.getElementById('container').replaceChild(resxml.cloneNode(true),document.getElementById('content'));
    Une idée ?

    merci

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Aucune véritable solution hélas...
    Tu peux toujours essayer ca, mais on m'a dit que pour ce cas la, ca ne marche pas...
    http://www.developpez.net/forums/sho...?t=6259&page=2

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    en tatonant un peu j'ai constaté que si je recréais le noeud avec les fonctions dom de javascript et que j'inserais ce nouveau noeud, les styles css étaient bien appliqués

    une petite fonction récursive que voici et le tour est joué
    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
    function transformXML(node) {
    	if(node.nodeType==3)
    		return document.createTextNode(node.nodeValue);	
    	else {
    		var new_node=document.createElement(node.tagName);
    		var i;
    		for(i=0;i<node.attributes.length;i++) {
    			new_node.setAttribute(node.attributes[i].nodeName,node.getAttribute(node.attributes[i].nodeName));	
    		}
    		for(i=0;i<node.childNodes.length;i++) {
    			new_node.appendChild(transformXML(node.childNodes[i].cloneNode(true)));	
    		}
    		return new_node;
    	}
    }
    il faut passer en parametre de la fonction le documentElement de la réponse en XML de la requete Ajax et en gros javascript copie le noeud

    et ca marche (enfin pour ce que je lui fais faire il y a surement des cas ou ca marche pas mais la fonction est extensible)

    que pensez vous de cette solution ?

  4. #4
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par tclariss
    en tatonant un peu j'ai constaté que si je recréais le noeud avec les fonctions dom de javascript et que j'inserais ce nouveau noeud, les styles css étaient bien appliqués

    une petite fonction récursive que voici et le tour est joué
    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
    function transformXML(node) {
    	if(node.nodeType==3)
    		return document.createTextNode(node.nodeValue);	
    	else {
    		var new_node=document.createElement(node.tagName);
    		var i;
    		for(i=0;i<node.attributes.length;i++) {
    			new_node.setAttribute(node.attributes[i].nodeName,node.getAttribute(node.attributes[i].nodeName));	
    		}
    		for(i=0;i<node.childNodes.length;i++) {
    			new_node.appendChild(transformXML(node.childNodes[i].cloneNode(true)));	
    		}
    		return new_node;
    	}
    }
    il faut passer en parametre de la fonction le documentElement de la réponse en XML de la requete Ajax et en gros javascript copie le noeud

    et ca marche (enfin pour ce que je lui fais faire il y a surement des cas ou ca marche pas mais la fonction est extensible)

    que pensez vous de cette solution ?
    Ca empêche surment le JS de fonctionner... mais il y a de l'idée...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    que veux tu dire par ca empeche le JS de fonctionner ?

    écoutes ca marche nickel sur firefox. sous IE bien sur ca ne marche pas mais bon dans mon cas particulier ce n'est pas trés grave. a tout hasard si tu peux me mettre sur une piste ca m'interesserait quand meme.

  6. #6
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    imagine le code suivant : <script>alert('')</script>

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    oui forcement mais j'ai imagnié cette function dans l'optique de transformer un document xml généré par un script php en noeud xml intégrable dans une page web

Discussions similaires

  1. [HTML/PHP/AJAX/JAVASCRIPT/XML/TMX/MYSQL/JAVA] Mémoire de traduction
    Par titoff85 dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 04/08/2007, 08h20
  2. [AJAX] Ajax, formulaire, div et select
    Par n8ken dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/09/2006, 10h51
  3. [AJAX] Recuperer des donnes xml
    Par bourvil dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 28/07/2006, 08h39
  4. [AJAX] Soap Ajax classe javascript
    Par sekaijin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/06/2006, 08h50

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