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

jQuery Discussion :

Faire un append du contenu xml récupéré par ajax


Sujet :

jQuery

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut Faire un append du contenu xml récupéré par ajax
    Bonjour, comme le titre l'indique, je souhaite faire un append d'un contenu xml récupéré par ajax.

    Je récupère bien mon élément voici ma fonction en cas de succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    success: function( data )
    {
    	// Le premier noeud
    	var first = $( data ).children().get( 0 );
    	// La div de réception
    	var content = $( '#'+$( first ).attr( 'class' ) ).find( '.contentAction' );
    	$( content ).empty();
    	$( content ).append( $( first ).children() );
    }
    Lorsque j'inspecte mon code (avec firebug) je vois mes balises mais à l'écran n'est visible que le texte comme si je faisais .text() sur tous les enfants de "first".
    Du coup comment je peux récupérer le code html car quand je fais à la place du append je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $( first ).children().each( function()
    {
    	$( content ).append( $( this ).html() );
    });
    J'ai une erreur javascript (normale vu que ce n'est pas un élément html) :
    Erreur*: this[0].innerHTML is undefined
    Fichier Source*: http://localhost/gallerix/Js/JQuery.js
    Ligne*: 12
    Voici un exemple basique du ficheir xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <item class="ListImagesAction">
    	<div class="imageDossier">blabla</div>
    </item>
    J'espère avoir été clair ?

    Merci

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Si j'ai bien compris la structure du fichier XML, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $(data).find("div").each(function(i, item) {
       var classe = $(item).attr("class");
       var str = $(item).text();
       ...
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    Non en fait c'est un peu plus galère que ca je pense car mon exemple état trop basique :
    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"?>
    <item class="ListImagesAction">
    	<div>
    		<p>Du texte</p>
    		<p>Encore</p>
    		<div>encore une div</div>
    	</div>
    	<div>
    		<img src="img.png" alt="img" />
    	</div>
    </item>
    Le root qui est appelé item est juste là pour contenir les informations en fait et je voudrais insérer dans ma page toute la structure qui correspond donc à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div>
    	<p>Du texte</p>
    	<p>Encore</p>
    	<div>encore une div</div>
    </div>
    <div>
    	<img src="img.png" alt="img" />
    </div>
    Et pas juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Du texte Encore encore une div

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour.

    Exemple :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Document sans nom</title>
        <script type="text/javascript" src="../../lib/jquery-1.3.2.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
     
                $.get("exercice1.xml", function(xml){
                    var s = [];
     
                    $(xml).children("div").each(function(i, item){
                        //console.log("item[" + i + "] = " + item);
     
                        $(item).children("p").each(function(j, jtem){
                            //console.log("jtem[" + j + "] = " + jtem);
     
                            s.push("<p>" + $(jtem).text() + "</p>");
                        });
     
                        $(item).children("div").each(function(k, ktem){
                            //console.log("ktem[" + k + "] = " + ktem);
     
                            s.push("<div>" + $(ktem).text() + "</div>");
                        });
     
                        $(item).children("img").each(function(m, mtem){
                            //console.log("mtem[" + m + "] = " + mtem);
     
                            s.push("<img style='margin:12px; border:1px solid black;' src='" + $(mtem).attr("src") + "' alt='" + $(mtem).attr("alt") + "' />");
                        });
                    });
     
                    $("#conteneur").html("<div>" + s[0] + s[1] + s[2] + "</div><div>" + s[3] + "</div>");
                }, "xml");
            });
        </script>
    </head>
    <body>
        <div id="conteneur">
            <p>
                Désolé, le code XML n'est pas disponible !
            </p>
            <p>
                Veuillez avoir l'obligeance de signaler cette erreur au <a href='mailto:moi@ici.com'>Webmestre</a>. Merci !
            </p>
        </div>
    </body>
    </html>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    Merci pour ta réponse mais elle ne me convient qu'à moitié car mon exemple n'était qu'un diminutif de toutes les possibilités. En fait je voudrais faire ca mais de manière plus générique donc si je veux reprendre ta méthode, je n'ai qu'à faire un find( '*' ) et créer les balises avec nodeName tout en testant les balises orphelines ....... un case tête.

    Est ce qu'il n'y aurait pas plutôt moyen de convertir mon objet JQuery de manière à ce qu'il accepte le .html()

    J'ai pas trop envie de boucler sur tous mes éléments et les recréer avec tous les attributs que je dois récupérer ...

    Voici un parmi plusieurs vrai exemple parmi l'infinité de fichiers possibles (car ils sont générés via php) :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?xml version="1.0"?>
    <item class="ListImagesAction">
    	<div class="imageDossier">
    		<div class="listImages">
    			<p class="folderClose folderLink">aa</p>
    			<div class="imageDossier" style="display: none;">
    				<div class="listImages">
    					<p class="imageUse imageLink" title="4">nes.png</p>
    				</div>
    			</div>
    			<p class="folderClose folderLink">bb</p>
    			<div class="imageDossier" style="display: none;">
    				<div class="listImages">	
    					<p class="folderClose folderLink">cc</p>
    					<div class="imageDossier" style="display: none;">
    						<div class="listImages">
    							<p class="imageNoUse imageLink" title="6">ichi.png</p>
    							<p class="imageUse imageLink" title="7">tuxichi.png</p>
    						</div>
    					</div>
    					<p class="imageNoUse imageLink" title="94">Tortue.png</p>
    					<p class="imageUse imageLink" title="5">tuxichi.png</p>
    				</div>
    			</div>
    			<p class="folderClose folderLink">cc</p>
    			<div class="imageDossier" style="display: none;">
    				<div class="listImages">
    					<p class="imageUse imageLink" title="93">Bleach-05.jpg</p>
    					<p class="imageUse imageLink" title="9">major1.jpg</p>
    					<p class="imageUse imageLink" title="10">Nintendo.jpg</p>
    					<p class="imageUse imageLink" title="11">tf2-2.png</p>
    				</div>
    			</div>
    			<p class="folderClose folderLink">photos</p>
    			<div class="imageDossier" style="display: none;">
    				<div class="listImages">
    					<p class="imageUse imageLink" title="15">c2xlelouch1280.png</p>
    					<p class="imageUse imageLink" title="16">CodeGeassGazeAbyss.jpg</p>
    					<p class="imageUse imageLink" title="12">Mario-01.jpg</p>
    					<p class="imageUse imageLink" title="13">testchmba11advanced0000.jpg</p>
    				</div>
    			</div>
    			<p class="imageUse imageLink" title="1">lucky.gif</p>
    			<p class="imageNoUse imageLink" title="98">Major.png</p>
    			<p class="imageUse imageLink" title="2">spy.png</p>
    			<p class="imageUse imageLink" title="3">tuxichi.png</p>
    		</div>
    	</div>
    </item>
    Comme tu peux le voir c'est assez diversifié dans les emboitements et ils ne sont pas tous comme ca

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Si, je dis si, votre xml est toujours un html emballé et qu'il commence toujours par <div> et se termine toujours par un </div> alors on peut essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $.get("exercice1.xml", function(data){
        var s = data;
        $("#conteneur").html(s.slice(s.indexOf("<div>"), s.lastIndexOf("</div>")+6));
    }, "xml");
    Ce n'est pas très beau, mais...

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre expérimenté Avatar de onirisme
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Novembre 2004
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 221
    Par défaut
    Bonjour,

    Regarde du côté de la fonction $.load(URL,DATA,CALLBACK).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $(document).ready(function(){
        $("#conteneur").load('test.xml div');
    });

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    Bonjour tout le monde,

    désolé du retard mais j'ai eu quelques mouvement donc j'ai aps eu le temps de répondre.

    J'ai finalement réussi en changeant le dataType en html (même si ca n'est pas vraiment donc j'ai une petite bidouille pour récupérer la class tout va bien j'arrive bien à intégrer le contenu html mais il me reste un soucis qui est le dynamisme de cette partie qui est bloqué car les évènements javascript de JQuery ne reconnaissent pas l'ajout comme comme de l'élément activable

    Par exemple ceci ne marche plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $( 'h3' ).mouseover( function()
    {
    	$( this ).css( 'cursor' , 'pointer' );
    	$( this ).css( 'background-color' , '#DDDDDD' );
    });
    Du coup si dans mon code que je copie il y a un h3, celui-ci ne réagit pas à cet évènement.

    Merci.

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    Ok j'ai trouvé : utiliser live à la place de .event.

    Par exemple au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $( 'h3' ).mouseover( function()
    {
    	$( this ).css( 'cursor' , 'pointer' );
    	$( this ).css( 'background-color' , '#DDDDDD' );
    });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $( 'h3' ).live( 'mouseover' , function()
    {
    	$( this ).css( 'cursor' , 'pointer' );
    	$( this ).css( 'background-color' , '#DDDDDD' );
    });
    Voici un exemple : http://bestyle.org/jquery-live-test/

    Voilou.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/10/2011, 11h26
  2. Réponses: 2
    Dernier message: 12/10/2010, 10h11
  3. comment faire pour que mon parseur XML n'échappe pas les carctères tels que ">" par exemple ?
    Par _LittleFlea_ dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 16/10/2009, 16h25
  4. Réponses: 3
    Dernier message: 21/06/2004, 11h20
  5. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

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