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

mlinux Messages postés 6 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 9 novembre 2009 - 27 avril 2008 à 11:08
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 28 avril 2008 à 14:47
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

cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
27 avril 2008 à 12:46
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]
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
27 avril 2008 à 13:40
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]
0
mlinux Messages postés 6 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 9 novembre 2009
27 avril 2008 à 16:48
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
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 avril 2008 à 14:47
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]
0
Rejoignez-nous