[Ajax][Resolut] Pb avec div.innerHTML = xhr.responseText; sous ie

Pb avec div.innerHTML = xhr.responseText; sous ie [Ajax][Resolut] - HTML/CSS - Programmation

Marsh Posté le 21-08-2008 à 11:02:33    

Salut,
 
Je vais vous parler d'un pb sur lequel je viens de plancher 2 jours sans trouver la solution sur le net. Je me suis dit que si qqun tombait dessus, ca pourrait bien l'aider de trouver un post avec la solution !
 
On imagine une page html contenant ceci :

Code :
  1. <script language="Javascript">
  2.   <!--
  3. //// Fonction permettant d'apeller une page php (target) en lui passant des parametres (params) et d'afficher son contenu dans un div (div)
  4. function AjaxPostAndPrintResInDiv(target, params, div)
  5. {
  6.    var OAjax;
  7.    if (window.XMLHttpRequest)
  8.      OAjax = new XMLHttpRequest();
  9.    else if (window.ActiveXObject)
  10.       OAjax = new ActiveXObject('Microsoft.XMLHTTP');
  11.    OAjax.onreadystatechange = function()
  12.    {
  13.       if (OAjax.readyState == 4 && OAjax.status==200)
  14.             document.getElementById(div).innerHTML = OAjax.responseText;
  15.    }
  16.    OAjax.open("POST", target, true);
  17.    OAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  18.    OAjax.send(params);
  19. }
  20.   -->
  21. </script>
  22.               <a href="#"
  23.                   onclick="AjaxPostAndPrintResInDiv('miniAddElem.php', 'aff=toto', 'RubriqueLinkDiv');">
  24.                 Ajout contenu div
  25.               </a>
  26.               <div id="RubriqueLinkDiv">
  27.                 <!-- résulat de la requete ajax -->
  28.               </div>


la page miniAddElem.php est une page quelquonque renvoyant un resultat quelquonque en fonction du contenu des params que l'on lui passe...
 
Ce code fonctionne bien sous firefox, seamonkey, opera. Sous ie cela me sort une erreur de type inconnue  :pfff:  
 
Apres moultes recherches j'ai déterminé que c'était le

document.getElementById(div).innerHTML = OAjax.responseText;


qui posait un pb. A Priori Ie ne m'autorise pas à mettre le contenu de OAjax.responseText dans document.getElementById(div).innerHTML.
En revanche ce que je ne m'explique pas, c'est qu'il m'autorise à faire

document.getElementById(div).innerHTML = "blah blah les fleursetc...";

:kaola:  
 
En cherchant tout les moyens possible de modifier le contenu d'une page en javascript je suis tombé sur la methode appendChild.
en transformant la ligne :

Code :
  1. document.getElementById(div).innerHTML = OAjax.responseText;


 
par :

Code :
  1. var Ndiv = document.createElement("div" );
  2. Ndiv.innerHTML = OAjax.responseText;
  3. document.getElementById(div).appendChild(Ndiv);


 
Mircale, cela fonctionne !  
Je précide que, parmis mes moultes essais, j'avais tenté auparavant de passer par une variable de type texte temporaire sans succes.
 
Je précise aussi pour le puristes que ceci est un bout de code pour illustrer le principe, il n'est donc pas equipé de tout les tests permettant une execution fiable.


Message édité par notod le 21-08-2008 à 11:10:46
Reply

Marsh Posté le 21-08-2008 à 11:02:33   

Reply

Sujets relatifs:

Leave a Replay

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