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

AJAX Discussion :

[AJAX] ajax et xml ne fonctionnant pas sous Firefox


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut [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 : 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+='&nbsp;'+objNamedNodeMap.getAttribute("name");
    			        liste_couleur+='&nbsp;'+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('&nbsp;');
    			var tabSplitCouleur = liste_couleur.split('&nbsp;');
    			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 : 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>
    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
    var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode);
    Et autre chose d'étrange, lorsque je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    c'est juste qu'il compte les noeuds vides.

    Utilise un nodeCleaner (via une chtite recherche sur le forum).

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Merci bien! Cela ne compte effectivement plus que 4 noeuds.

    Par contre j'ai toujours le même soucis!
    il y a une erreur sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode);

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Phpdebut Voir le message
    Par contre j'ai toujours le même soucis!
    il y a une erreur sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode);
    Pour le XML pur et dur je passe la main

    Par contre, tu peux déjà virer les "var" de ta boucle for() sinon, multi-déclarations des variables ...

    Sinon, c'est quoi le message d'erreur ?

    Et au cas où
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode);
    Tu es en train de parcourir "root" et tu remontes à "xmldoc" ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    D'accord donc j'ai enlevé tous les var, et j'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objNamedNodeMap = root.childNodes(iNode);
    A priori ça ne change rien du tout: ça marche toujours sous IE et non sous firefox...

    En fait il n'y a pas de message d'erreur. L'execution du script bloque à cet endroit rien de plus...

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Phpdebut Voir le message
    A priori ça ne change rien du tout: ça marche toujours sous IE et non sous firefox...
    Ben ça c'est plutôt bizarre
    A priori tu as changé de niveau dans l'arborescence

    Tu as sûr de bien récupérer ce que tu attends dans xmldoc et root (si tu fais un alert() ) ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    C'est bon j'ai réussi:
    il suffit de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var objNamedNodeMap = xmldoc.documentElement.childNodes(iNode);
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objNamedNodeMap = root.getElementsByTagName("action")[iNode];
    Merci pour tout!

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Arf !

    Donc tu n'étais pas positionné au bon niveau de l'arborescence ...

    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

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

Discussions similaires

  1. [AJAX] Parsage XML ne fonctionne pas sous IE!
    Par webrider dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/03/2007, 19h50
  2. [HTML] iframe ne fonctionne pas sous firefox
    Par freija dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 29/08/2006, 12h20
  3. fonction ridicule qui fonctionne pas sous firefox
    Par Isses dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/06/2006, 12h08
  4. Evenement OnClick qui ne fonctionne pas sous firefox
    Par frechy dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/12/2005, 16h06
  5. Java ne fonctionne pas sous Firefox
    Par Info-Rital dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 29/07/2004, 23h37

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