Bonjour!
Voila j'ai (encore!) un soucis avec mon code. J'explique ce que je veux faire:
Je veux récupérer le contenu d'un fichier XML en local et l'insérer dans un tableau. Sous IE ça marche très bien, mais sous Firefox ça ***** grave...
voilà le code d'appel du xml et d'insertion dans un tableau en ajax/javascript :
Et voici mon fichier XML:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 //Fonction permettant d'instancier les actions // url: URL du fichier à ouvrir function creerRequeteAction() { if(liste_action==''){ if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('La creation d\'objet xmlHTTPRequest n\'a pas ete possible'); return false; } http_request.onreadystatechange = function(){ if (http_request.readyState == 4) { if (http_request.status == 200) { alertContents(false,http_request.responseXML); } else { alert('Il y a eu un probleme avec la requete.'); } } } http_request.open('GET','web_calendar_action.xml', true); http_request.send(null); } else alertContents(true,''); } //Fonction récupérant ce qu'il y a a l'intérieur du fichier XML function alertContents(listeActionStatus, reponseText) { //Si la liste d'action est vide, on l'a rempli if(listeActionStatus==false){ var xmldoc = reponseText; var root = xmldoc.getElementsByTagName('action_list').item(0); for (var iNode = 0; iNode < root.childNodes.length; iNode++) { var cnt = 0;//Compteur du tableau arr var arr = new Array();//Tableau qui contiendra chaque ligne correspondant à un couple action/couleur var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode); if (objNamedNodeMap.getAttribute("name")!="") { liste_action+=' '+objNamedNodeMap.getAttribute("name"); liste_couleur+=' '+objNamedNodeMap.getAttribute("color"); arr[cnt] = '<a href="javascript:initBulle(\''+objNamedNodeMap.getAttribute("name")+'\');">'+objNamedNodeMap.getAttribute("name")+'</a>'; cnt++; arr[cnt] = '<table style="background-color:'+objNamedNodeMap.getAttribute("color")+'; height: 10px; width: 10px;"><tr><td></td></tr></table>'; cnt++; } ajoutLigne("tabAction", arr); } } //Sinon on utilise ce qui est déjà écrit à l'intérieur de liste_action else{ var tabSplitAction = liste_action.split(' '); var tabSplitCouleur = liste_couleur.split(' '); for(var compteur = 1; compteur < tabSplitAction.length; compteur++){ var cnt = 0;//Compteur du tableau arr var arr = new Array();//Tableau qui contiendra chaque ligne correspondant à un couple action/couleur arr[cnt] = '<a href="javascript:initBulle(\''+tabSplitAction[compteur]+'\');">'+tabSplitAction[compteur]+'</a>'; cnt++; arr[cnt] = '<table style="background-color:'+tabSplitCouleur[compteur]+'; height: 10px; width: 10px;"><tr><td></td></tr></table>'; cnt++; ajoutLigne("tabAction", arr); } } } //Fonction ajoutant une ligne dans la div d'action function ajoutLigne(tablename, arr) { var tbl = document.getElementById(tablename); var lastRow = tbl.rows.length; var row = tbl.insertRow(lastRow); for (r = 0; r < arr.length; r++) { var cell = row.insertCell(r); cell.innerHTML = arr[r]; } }
Ce que le code au-dessus récupère c'est le nom et la couleur de chaque action. Sous IE il n'y a aucun problème ça met le tout dans le tableau, Mais sous Firefox ça bloque ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?xml version="1.0" standalone='no'?> <action_list user=""> <action name="arrosage" hasend="yes" color="#ff0000"></action> <action name="chauffage" hasend="yes" color="#008800"></action> <action name="demarrage chauffage" hasend="no" color="#000088"></action> <action name="arret chauffage" hasend="no" color="#ff0055"></action> </action_list>
Et autre chose d'étrange, lorsque je fais ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode);
pour verifier ce qu'il se passe, il m'affiche 9! Diable mais où voit-il 9 elements dans mon XML???
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert(root.childNodes.length);
D'avance merci pour votre aide!
Partager