[AJAX] responseXML est null responseText contient bien mon xml
Bonjour,
Mon problème est simple mais je ne parviens pas a le résoudre. J'utilise AJAX pour récupérer un fichier xml (qui contient des informations pour cocher ou décocher des checkbox dans ma page html). Ce fichier est généré par un script php (dans lequel je précise bien le header a text/xml, j'ai aussi testé application/xml mais pas mieux) puis est envoyé au client.
Firebug m'a permis de verifier l'intégrité des données reçues (pas d'espaces, sauts de lignes ou tabulation entre mes balises) mais dés que j'utilise responseXML, firebug me dit que cet element est null, et aucune modification de ma page n'est prise en compte.
Je jois ici le xml renvoyé par le serveur:
Code:
1 2 3 4 5
|
<?xml version="1.0" encoding="utf-8"?><response><prod id="199" lie="true" /><prod id="29" lie="true"
/><prod id="53" lie="true" /><prod id="54" lie="true" /><prod id="55" lie="true" /><prod id="56" lie
="true" /><prod id="58" lie="true" /><prod id="61" lie="true" /><prod id="76" lie="true" /><prod id="77"
lie="true" /></response> |
et les fonctions javascript:
-> la première, celle qui fait appel a Ajax (je ne pense pas que l'erreur vienne de la mais on ne sait jamais, la fonction getXhr() renvoie juste un objet xmlHttpRequest en fonction du navigateur.)
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
|
/*
* cette fonction permet de valider la liaison entre un produit et un autre en direct.
*/
function valid(idSource, idCible)
{
// on definit l'objet qui servira a utiliser ajax.
var xhr = getXhr();
// on definit comment et ou seront envoyées les données.
xhr.open("POST","<?php echo(DIR_WS_ADMIN.'ajax.php');?>",true);
// on détermine le header.
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.onreadystatechange = function(){
traitementReponse(xhr);
};
// on envoie la requête asynchrone vers le serveur.
if(document.getElementById('all').checked == false)
{
xhr.send("fonction=validLinkedProduct&id="+idSource+"&cible="+idCible);
}
else
{
xhr.send("fonction=validLinkedProduct&id="+idSource+"&cible="+idCible+"&all=true");
}
} |
-> la seconde est la fonction qui traite la réponse.
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
|
/*
* cette fonction traite la réponse du serveur lors de l'appel ajax pour les checkboxs
* la forme du doc xml renvoyé doit être la suivante:
* < ? xml version="1.0" ? >
* <response>
* <prod id="..." lie="true|false"/>
* ...
* </reponse>
*/
function traitementReponse(xhr)
{
var docXML= xhr.responseXML.childNode[0];
// pour chaque elements trouvé, on le coche (ou decoche) selon le besoin.
for (var i=0;i<docXML.childNodes.length;i++)
{
var chk = 'checked';
if(docXML.childNodes[i].lie == false)
{
chk = 'false';
}
document.getElementById(docXML.childNodes[i].id).checked = chk;
}
} |
J'ai tenté d'afficher docXML.childNodes.length et il me renvoie le bon nombre mais dés que je veux l'utiliser, il me dit que l'objet est null.
Petite précision tout de même, en cherchant a aller plus loint avec firebug, j'ai trouvé une indication me disant qu'une erreur s'est produite lors du parsing du xml.
Si quelqu'un a une idée, elle est la bienvenue.
Cordialement.