Document.getElementById(strId3).innerHTML = req; Problème avec IE

Signaler
Messages postés
6
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
9 novembre 2009
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonjour,

J'ai un petit script AJAX qui fonctionne avec Firefox et Safari et ne fonctionne pas avec Internet Explorer IE 8 et IE 8.

/*******************************************************************************/ /*                                                                             */ 
/*    Script AJAX dans un DIV avec rafraichissement toutes les CINQ secondes   */
/*                                                                             */ 
/*    Source : http://openweb.eu.org/articles/objet_xmlhttprequest             */ 
/*                                                                             */ 
/*    Avec Firefox  = > OK                                                      */ 
/*    Avec Safari   => OK                                                      */ 
/*                                                                             */ 
/*    Avec IE8 et IE7  => Erreur   "A Runtime Error has occurred"              */ 
/*    Au niveau de :   "document.getElementById(strId3).innerHTML = req;"      */ 
/*                                                                             */ 
/*                                                                             */ 
/*******************************************************************************/ 

var strId3     = "div_AJAX_3";

function getHTTPObject()
   {
   var xmlhttp = false;

   /* Compilation conditionnelle d'IE */
   /*@cc_on
   @if (@_jscript_version >= 5)
      try
         {
         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
         }
      catch (e)
         {
         try
            {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
         catch (E)
            {
            xmlhttp = false;
            }
         }
      @else
      xmlhttp = false;
   @end @*/

  /* on essaie de créer l'objet si ce n'est pas déjà fait */
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
     {
     try
        {
        xmlhttp = new XMLHttpRequest();
        }
     catch (e)
        {
        xmlhttp = false;
        }
     }

   if (xmlhttp)
      {
      /* on définit ce qui doit se passer quand la page répondra */
      xmlhttp.onreadystatechange=function()
         {
         if (xmlhttp.readyState == 4) /* 4 : état "complete" */
            {
            if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
               {
               req = xmlhttp.responseText;
               // alert(req);
               document.getElementById(strId3).innerHTML = req;
               }
            }
         }
      }
   return xmlhttp;
   }   // Fin de function getHTTPObject()

function Affich_AJAX_3()
   {
   var strFichier = "script.php";

   var xmlhttp = getHTTPObject();             /* Création de l'objet : */
   xmlhttp.open("GET", strFichier, true);     /* Préparation d'une requête asynchrone de type GET : true => Dialogue asynchrone */ 
   xmlhttp.send(null);                        /* Effectue la requête : */
   setTimeout("Affich_AJAX_3();", 20000);      /* Relance script toutes les 5 secondes */
   }   // Fin de function Affich_AJAX_3() 



L'erreur A Runtime Error has occurred se trouve sur document.getElementById(strId3).innerHTML = req;:

               req = xmlhttp.responseText;
               // alert(req);
               document.getElementById(strId3).innerHTML = req;


Nota : req = xmlhttp.responseText; est correct puisque le script fonctionne correctement avec Firefox et Safari. De plus l'activation de alert(req); montre bien le code récupéré.

Si quelqu'un avait une idée, je serai preneur.

Cordialement.
Michel

4 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
Bonjour,

    ben déjà IE8 n'est pas tout à fait opérationnel.... 
        il n'est qu'en test pour l'instant   et pas finalisé !

    ensuite...

//~~~~~~~~~~~~~~~~~~~~~~~~~~~
function xmlhttp()    //~~ XMLHTTP ~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~
{    var x;
    try              {    x = new ActiveXObject("Microsoft.XMLHTTP");    }
    catch (e)     {    try           {    x = new ActiveXObject("Msxml2.XMLHTTP");    }
                        catch (e)      {    try             {    x = new XMLHttpRequest();    }
                                                 catch (e)    {    x=false;    }
                                           }
                    }
    return x;
}
....
var xml = xmlhttp();
    if(!xml)
              {    alert("XmlHttpRequest non supporté");    }
    else    { ...

ça ira peut-être mieux....

ensuite ( encore )
    un problème de cache peut-être ? ( probablement latent ! )
    derrière l'url ajoute ?un_truc_aléatoire          new Date() par exemple

   
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
j'ai aussi oublié de dire qu'il vaudrait mieux
    relancer l'appel au php uniquement lorsqu'une réponse est revenu....
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
6
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
9 novembre 2009

Bonjour,

Je viens de trouver la cause de mon problème.

Dans le script var strFichier = "script.php"; appelé par xmlhttp.open("GET", strFichier, true);  il y avait une commande <form xxx>.

Dès que j'ai sorti <form xxx> de mon script tout s'est mis à fonctionner.

Avec mes remerciements.
Michel
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
tant mieux... nous on ne pouvait pas trouver....
malgré tout, au moins :
>>il vaudrait mieux ne relancer l'appel au php que lorsqu'une réponse est revenu....
>>derrière l'url ajouter ?un_truc_aléatoire          new Date() par exemple pour gérer le cache !
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]