[Résolu] documentElement vide sous IE ? Firefox tout bon ?

  • Auteur de la discussion Auteur de la discussion Troll
  • Date de début Date de début
Nouveau WRInaute
Salut à toutes et à tous.

Après moultes recherches, une bonne centaines de liens Google testé, et plusieurs heures de prise de tête... j'abdique, j'en appelle à vos connaissances :)


Le problème est le suivant :

J'utilise AJAX pour envoyer une requête à un fichier PHP (jusque là, rien d'anormal). Ce fichier PHP me renvoit un document XML (rien d'anormal non plus), le content-type est bien envoyé, le XML est, il me semble, bien conforme... et tout cela fonctionne à merveille... sous Gecko !

En effet, sous IE, et Opéra (qui a tendance a suivre IE je trouve :D ), ça ne fonctionne pas. Au lieu d'accèder au contenu j'ai un coup un "objet recquis", un autre un "null"... Bref c'est la galère >_<

Et je m'en veux un peu par moment d'avoir laché la méthode responseText :D


Voici le code PHP :


Code:
header("Content-Type: text/xml; charset=ISO-8859-1;");
echo '<?xml version="1.0" ?><document><error>1</error><message>Error : missing data</message></document>';


Maintenant, le traitement en JS :

Code:
		http.onreadystatechange = function()
		{ 
			if(http.readyState == 4)
			{
				if(http.status == 200)
				{

							
							if(http.responseXML) { 
							window.alert( http.responseXML);
							
								var xmldoc = http.responseXML.documentElement;
								loadNode.innerHTML = xmldoc.getElementsByTagName("message")[0].firstChild.data; 
								
								
							}
				}	
				else	
				{
					
						loadNode.innerHTML = "<span style='color:red;' ><strong>Erreur </strong>: <i>" + http.statusText + "</i>";	
				}	
					
			} 
		};
Info : loadNode est le noeud d'affichage HTML de la réponse ajax sur ma page. Mais on peut très bien remplacer "loadNode.innerHTML" par "window.alert", ça ne changera rien...



Merci d'avance à toutes celles et tous ceux qui participeront ;)
 
WRInaute impliqué
salut,
la réponse serait de dire qu'il faut effectivement préciser à IE l'entete header( 'Content-Type: text/xml; charset=ISO-8859-1' );
maintenant vu que tu l'a précisé, bah ca devrait marcher !
Non vérifie bien, peut être, que dans ton php tu n'es rien après ton ?> (pas d'espace, ni de retour à la ligne) car cela pourrait constituer une erreur d'analyse pour ie et donc un documentElement non défini...
 
Nouveau WRInaute
Non, il n'y a absolument rien après ?> ...

Le pire c'est que ça marche vraiment niquel sous Firefox =/
 
Nouveau WRInaute
Salut,

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Quel rapport ? :)
 
WRInaute impliqué
comme çà :)
toujours pas résolu ?
Code:
http.onreadystatechange = function()
      {
         if(http.readyState == 4)
         {
            if(http.status == 200)
            {
alert( http.responseText );
...
t'affiche bien ton xml ?
 
WRInaute impliqué
essaye ceci peut être :
Code:
header("Content-Type: text/xml; charset=ISO-8859-1;");
echo '<?xml version="1.0" ?><document><error>1</error><message>[!CDATA[Error : missing data]]</message></document>';
que dit firebug sur les entêtes de ton webservice php ?
 
Nouveau WRInaute
OMFG !

Surprenant... certes, mais en [!CDATA ]] IE reconnait (enfin ?) le XML O_O


edit : Oula.. Je viens d'essayer ensuite, sans le CDATA, et ca marche aussi.. La, y'a un truc louche :lol:
(désolé pour le dubble post, mais si j'éditais, pas sûr que ca aurait été vu :) )
 
Nouveau WRInaute
Oui nan mais je vide le cache régulièrement mais... Là c'est vraiment énorme comme pouf je sais pas d'où ça c'est résolu :D
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut