[Ajax] Script bloqué sous IE avec balise XML vide

Script bloqué sous IE avec balise XML vide [Ajax] - PHP - Programmation

Marsh Posté le 26-04-2008 à 10:21:02    

Bonjour tout le monde,
 
j'ai un petit problème en Ajax. Je créé un script pour remplir une liste déroulante en fonction du choix de l'utilisateur dans premier une première liste déroulante. Rien de bien révolutionnaire. Or, dès qu'une balise vide est retournée dans le document XML, mon script ne retourne plus rien.
Voici le contenu de mon document XML:

Code :
  1. <exemple>
  2. <id>127</id>
  3. <ref>PR01</ref>
  4. <nom/>
  5. <id>128</id>
  6. <ref>PR02</ref>
  7. <nom/>
  8. <id>129</id>
  9. <ref>PR03</ref>
  10. <nom/>
  11. <id>130</id>
  12. <ref>PR04</ref>
  13. <nom/>
  14. <id>131</id>
  15. <ref>PR05</ref>
  16. <nom/>
  17. <id>132</id>
  18. <ref>PR11</ref>
  19. <nom/>
  20. </exemple>


 
Et voici le javascript utilisé pour afficher le tout:

Code :
  1. function get_couleurs(revetement, caracteristique)
  2. {
  3.  var xhr=null;
  4.  if (window.XMLHttpRequest)
  5.   xhr = new XMLHttpRequest();
  6.  else if (window.ActiveXObject)
  7.   xhr = new ActiveXObject("Microsoft.XMLHTTP" );
  8.  //on définit l'appel de la fonction au retour serveur
  9.  xhr.onreadystatechange = function()
  10.  {
  11.   if (xhr.readyState==4)
  12.     {
  13.      for (i = document.getElementById('revetement_couleur_'+caracteristique).length-1; i>=0; i--)
  14.     document.getElementById('revetement_couleur_'+caracteristique).options[i] = null;
  15.      var docXML= xhr.responseXML;
  16.      var idCouleurs = docXML.getElementsByTagName("id" );
  17.    var tabIdCouleurs = new Array();
  18.    for (i = 0; i < idCouleurs.length; i++)
  19.     tabIdCouleurs[i] = idCouleurs.item(i).firstChild.data;
  20.    var nomsCouleurs = docXML.getElementsByTagName("nom" );
  21.    var refsCouleurs = docXML.getElementsByTagName("ref" );
  22.    for (i = 0; i < refsCouleurs.length; i++)
  23.    {
  24.     var nomCoul = '';
  25.     if (parseInt(nomsCouleurs.item(i).firstChild.data.value) != 0)
  26.       nomCoul = ' '+nomsCouleurs.item(i).firstChild.data;
  27.     document.getElementById('revetement_couleur_'+caracteristique).options[i] = new Option(refsCouleurs.item(i).firstChild.data+nomCoul, tabIdCouleurs[i]);
  28.    }
  29.    if (idCouleurs.length == 0)
  30.     document.getElementById('revetement_couleur_'+caracteristique).options[0] = new Option('Aucune couleur trouvée', '0');
  31.    document.getElementById('revetement_couleur_'+caracteristique).disabled = false;
  32.   }
  33.  };
  34.  //on affiche le message d'acceuil
  35.  document.getElementById('revetement_couleur_'+caracteristique).options[0] = new Option('Chargement en cours', '0');
  36.  document.getElementById('revetement_couleur_'+caracteristique).disabled = true;
  37.  //on appelle le fichier php
  38.  xhr.open("GET", "***/***.php?revetement="+revetement, true);
  39.  xhr.send(null);
  40. }


 
Le script fonctionne bien sous Firefox et IE, mais dès qu'une valeur renvoyée dans le XML est vide, ca ne fonctionne plus
 
Pour info encore, voici comment je génère le doctype et la balise <nom> dans le fichier php:

Code :
  1. header('Content-Type: text/xml; charset=ISO-8859-15');
  2. echo "<?xml version=\"1.0\"?>\n";
  3. echo "<exemple>\n";
  4. .
  5. .
  6. .
  7. .
  8. .
  9. $nom = ($row['nom_couleur'] != '') ? stripslashes($row['nom_couleur']) : '';
  10. echo "<nom>".$nom."</nom>\n";


 
J'ai également essayé avec

Code :
  1. $nom = ($row['nom_couleur'] != '') ? stripslashes($row['nom_couleur']) : ' ';

ou

Code :
  1. $nom = ($row['nom_couleur'] != '') ? stripslashes($row['nom_couleur']) : '&nbsp;';

rien ne fonctionne. La seule solution qui fonctionne est la suivante:

Code :
  1. $nom = ($row['nom_couleur'] != '') ? stripslashes($row['nom_couleur']) : '-';

mais je me retrouve ensuite avec un '-' qui ne sert à rien dans la deuxième liste déroulante.

Reply

Marsh Posté le 26-04-2008 à 10:21:02   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed