[AJAX] ajax et xml ne fonctionnant pas sous Firefox
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 :
Code:
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];
}
} |
Et voici mon fichier XML:
Code:
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> |
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:
var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode);
Et autre chose d'étrange, lorsque je fais ceci:
Code:
alert(root.childNodes.length);
pour verifier ce qu'il se passe, il m'affiche 9! Diable mais où voit-il 9 elements dans mon XML???
D'avance merci pour votre aide!