Bonjour,
Voila, je me permets de poser un message après des heures à me taper la tête contre les murs !
tout d'apres le script marche tres bien sous IE...mais sous firefox......

Donc j'envoie via un script php, un fichier xml dont le code est :

header('Content-Type: text/xml');
echo "<?xml version=\"1.0\"?>\n";
echo "<register>\n";
for($i=0;$i<count($erreurs);$i++)
{
echo "<donnee>".$erreurs[$i]."</donnee>\n";
}
echo "</register>\n";

Ensuite le code "AJAX" est :

function signin(pseudo,password1,password2,birthday,seebirthday,metier,seeprofession,pays,ville,email1,email2,seeemail,phone,seephone,web,seeweb,newsletter,code)
{
var OAjax;
var Index;
var erreur;
if (window.XMLHttpRequest) OAjax = new XMLHttpRequest();
else if (window.ActiveXObject) OAjax = new ActiveXObject('Microsoft.XMLHTTP');
OAjax.open('POST',"ctrregister.php",true);
OAjax.onreadystatechange = function()
{
if (OAjax.readyState == 4 && OAjax.status==200)
{
if (document.getElementById)
{
if (OAjax.responseText =='true')
{
document.location.href="confirmation.php"
}else{
//alert(OAjax.responseText);
var docXML= OAjax.responseXML;
var items = docXML.getElementsByTagName("donnee")
//on fait juste une boucle sur chaque element donnee trouve
for (i=0;i<items.length;i++)
{
document.getElementById("msg"+i).innerHTML=' ';

try{
document.getElementById("msg"+i).innerHTML=items.item(i).firstChild.data;
}catch(e){
var tmp=e;
}


}
}
}
}
}
OAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
OAjax.send('pseudo='+pseudo+'&password1='+password1+'&password2='+password2+'&birthday='+birthday+'&seebirthday='+seebirthday+'&metier='+metier+'&seeprofession='+seeprofession+'&pays='+pays+'&ville='+ville+'&email1='+email1+'&email2='+email2+'&seeemail='+seeemail+'&phone='+phone+'&seephone='+seephone+'&web='+web+'&seeweb='+seeweb+'&newsletter='+newsletter+'&code='+code);
}

A l'exécution sous firefox, j'ai l'erreur :

docXML has no properties
[Break on this error] var items = docXML.getElementsByTagName("donnee")

Lorsque je fais :
alert(OAjax.responseXML);

il me renvoie dans un message box : Null


Pour tester, j'ai essayer à la place :
alert(OAjax.responseText);

Et là, il me renvoie l'integralité du code de la page appellante !!!


Je me dis qu'il trouve pas ma page XML

j'en suis à :

header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header ("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n";

et il me trouve toujours pas mon fichier......je sais vraiment pas quoi faire....si quelqu'un a une réponse

S'il vous plait, je tourne en rond
Administrateur
Bonjour et bienvenue parmi nous Smiley smile

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace).

Cela provoque un affichage exécrable sur le forum Smiley decu

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je rappelle que le lien qui apparaît en bandeau tout en haut du forum ("Nouveau sur le forum ?...") est important. Il contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.
Il serait courtois de ta part de bien vouloir en prendre connaissance.

Bonne continuation Smiley smile

upload/1-code.gif
Modifié par Raphael (08 Nov 2007 - 17:06)
Modérateur
Salut,

Il me semble que tu as diverses choses inutiles et d'autres incomplètes dans ton script. Smiley smile

Tout d'abord, dans ce bout de code :
if (window.XMLHttpRequest)
     OAjax = new XMLHttpRequest();
else if (window.ActiveXObject)
     OAjax = new ActiveXObject('Microsoft.XMLHTTP');
Que fait ta fonction si window.XMLHttpRequest ou window.ActiveXObject ne sont pas supportés ?

Ensuite, ce que tu renvoies, c'est des données xml donc à quoi sert ce qui suit ?
if (document.getElementById) {
     if (OAjax.responseText == 'true') {
          document.location.href = "confirmation.php"
     }
     ...
Lorsque tu accèdes à un document xml, ce n'est pas :
var docXML = OAjax.responseXML;
qu'il faut mettre mais plutôt :
var docXML = OAjax.responseXML.documentElement;
De là, tu te trouves à la racine.

Pour ce bout de code :
var items = docXML.getElementsByTagName("donnee");
for (i = 0; i < items.length; i++) {
     document.getElementById("msg" + i).innerHTML = ' ';
     try {
          document.getElementById("msg" + i).innerHTML = items.item(i).firstChild.data;
     } catch(e) {
          var tmp = e;
     }
}
ça ne va pas. Tu initialises document.getElementById("msg" + i) mais ça ne sert à rien vu que tu réinitialises le contenu directement dans ton try catch (qui, au passage, lui aussi ne sert à rien).
var items = docXML.getElementsByTagName("donnee");
for(var i = 0; i < items.length; i++)
     document.getElementById("msg" + i).innerHTML = items.item(i).firstChild.nodeValue;
suffit.
Bonjour,
On ne sait pas si les remarques que l'on t'a faites ont résolues ton problème. Personnellement j'ai le même problème et la solution proposée ne résoud rien.

doc = ajaxrequest.responseXML.documentElement;

ou bien ...

doc = ajaxrequest.responseXML;

J'obtiens après l'instruction :

var root_node = doc.getElementsByTagName('alarmes').item(0);

Le message root_node has no properties.

Côté serveur il faut savoir que certaines instructions header génèrent des caractères vers le client.
Or, avant <?xml ... il doit y avoir aucun caractère !!
Or, il faut mettre header('Content-Type: text/xml') dans le serveur pour indiquer au client qu'il va recevoir du xml !!!
Donc, casse tête chinois. Moi j'ai déjà perdu mes cheveux.
Modérateur
Salut,

Si tu mets un header dans ton xml, alors tu peux générer ce fameux xml ainsi :
<?php

header('Content-type: application/xml; charset=utf-8');

echo '<?xml version="1.0" encoding="utf-8" ?>';
echo '<document>';
echo '	<data>Riri</data>';
echo '</document>';

?>
et ça ira mieux... (pas de conflit entre php et xml)
Les remarques précédentes sont néanmoins valables...