Bonjour à tous,
Ma problématique concerne l'affichage d'information contenues à la base dans un fichier xml.
Les informations d'une page sont affichées dynamiquement en fonction d'un élément de menu cliqué, et correspondant à un noeud du fichier xml.
J'ai mis en place une solution qui fonctionne, mais qui ne me satisfait pas:
1. Je détecte le clic sur l'un des liens du menu
2. Je charge le fichier XML sur lequel je dois me baser pour afficher le contenu correspondant
3. Je transforme ce fichier xml en json à l'aide du plugin xml2json
4. Je parcours l'objet obtenu pour accéder à mon information
En l'état, ma méthode charge le fichier XML pour chaque lien, et ce n'est pas top en terme de performance.
Je cherche donc à charger le fichier XML, le transformer en json pour le stocker dans une variable, ainsi manipulable pour l'ensemble des liens du menu, sans avoir à recharger le XML une nouvelle fois.
Ce qui donnerai:
1. je charge le fichier xml
2. je transforme le fichier xml en json
3. je stocke l'objet json dans une variable
4. pour chaque lien, je parcours l'objet à la recherche du contenu
Pour le moment, j'ai un code de ce type:
La première console me renvoie bien l'objet json, et la deuxième un objet XMLHttrRequest.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 var xml_content = 'mon_fichier.xml'; var getPage = $.get(xml_content, function(xml){ //utilisation du plugin var json = $.xml2json(xml); console.log(json); return json; }); console.log(getPage);
Mon problème, c'est que je ne parviens pas à ce que ma variable getPage soit un objet JSON, en dehors de la fonction.
De plus, je pense qu'il doit y avoir un problème de synchro car la deuxième console s'affiche avant la première.
le responseText de l'objet XMLHttrRequest renvoi le code XML, ce qui confirmerait le problème de synchro.
Comment faire pour que le "return json;" me renvoi bien l'objet json ?
Pour info, voici le code qui fonctionne, mais qui s'exécute sur chaque lien (donc lourd):
Merci d'avance pour toute aide ou suggestion
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 $.get(xml_content, function(xml){ var page = $.xml2json(xml); for(var page_num in page.nom) { //tab_page fait reference à la valeur d'un tableau déclaré plus haut if(page.nom[page_num].id == tab_page[2]){ for(var lang in page.nom[page_num].traduction) { if(page.nom[page_num].traduction[lang].lg == tab_page[1]){ texte = page.nom[page_num].traduction[lang].texte; } } } } });
Partager