Problème liste lié avec AJAX et navigateur et doctype

Résolu
FRED0181 Messages postés 6 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 10 décembre 2008 - 8 déc. 2008 à 12:28
FRED0181 Messages postés 6 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 10 décembre 2008 - 10 déc. 2008 à 20:02
Bonjour,

J'ai creer une une page en PHP/AJAX qui comporte deux listes déroulante liées.(listes remplies par BD Mysql)

Lorsque j'ai testé ma page, les listes liées ne marchées pas ni sur firefox, ni sur IE.
J'ai remarqué par la suite que le problème provené du doctype de la page, en effet après avoir supprimer le doctype, ma page marche sur firefox, mais pas sous IE, où là, les listes ne sont plus liées, l'ajax ne fonctionne pas.

Je sèche un peu...si quelqu'un peu m'aider!!

Merci

9 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
10 déc. 2008 à 19:32
Bonjour à tous,
eh ben ! pas superbe ta fonction
appel()

C'est quoi tb1 et tb2, les SELECTs à la
lecture de ton code...
<select name= "tb1" id="tb1" size=1 onChange='appel();'>

Ils s'y retrouvent comment les navigateurs, pour connaitre l'objet
référencé ?

Certes tu as mis un id et
un name mais tout de même !

Les
consoles d'ERREUR citées par TheBul3 ne t'ont
rien indiqué ??
?

Une façon de faire...
function appel() {
  var xml = xmlhttp();
   //-- Recup des objets
  var O_tb1 =
document.getElementById( 'tb1');
  var O_tb2 = document.getElementById(
'tb2');

  if (!xml) {
    alert("XmlHttpRequest non supporté");

  }
  else {
    xml.onreadystatechange = function() {
      if
(xml.readyState == 4) {
        var opt = xml.responseText.split("\t");

        O_tb2.length = 0;
        for (var n
= 1; n < opt.length; n++) {
          O_tb2.length++;
          O_tb2.options[ O_tb2.length -
1].text = opt[n];
        }
      }
    }
    xml.open("GET",
"ajax/ajax2.php?annee=" + O_tb1.options[O_tb1.selectedIndex].text, true);
    xml.send(null);

  }
}
il me semble que c'est plus clean... corriges peut être
déjà cela.
;O)
3
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
8 déc. 2008 à 13:21
le doctype influe, c'est sûr
ça n'a, par contre, aucun rapport avec ajax, les listes liées....

si en mettant un doctype ça ne fonctionne avec aucun navigateur,
   c'est que les "règles" liés à ce doctype ne sont pas respectées
   ( et si en en mettant un autre, ça ne fonctionne pas avec tel
     ou tel navigateur : même explication )

un exemple, ajax avec listes liées qui fonctionne
avec <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
( mais si on mettait
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

ou
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
ou ....
l'exemple c'est ici

il n'y aurait pas grand chose à voir pour que ça fonctionne....
si cela ne fonctionne pas.... : pas testé ;o) )

regarde les erreurs ( avec FF, car doit être lié au css, et IE est...
    disons "léger" au niveau signalement à ce niveau )

Chrome
, contrôler page actuelle / Options pour développeurs
/ Console Javascript, ----
FireFox
, Outils / Console d'erreurs
et mieux : télécharger mon Site] [M'écrire] Bul         
0
FRED0181 Messages postés 6 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 10 décembre 2008
8 déc. 2008 à 14:12
Voiçi le code et merci pour ta réponse :

J'ai éffacé mes identifiant de conection!!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >

<head>
<meta http-equiv="content-Type" content="text/html; charset=utf-8" />

<link rel="shortcut icon" href="favicon.ico" />
<style type="text/css">
@import url("styles.css");
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
<script type="text/javascript">
function 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;
   }
   function appel()
   {   var xml = xmlhttp();
      if(!xml)
             {   alert("XmlHttpRequest non supporté");   }
      else   {   xml.onreadystatechange = function()
                 {   if(xml.readyState==4)
                     {   var opt=xml.responseText.split("\t");
                         tb2.length=0;
                         for ( var n=1;n<opt.length;n++ )
                         {   tb2.length++;
                             tb2.options[tb2.length-1].text=opt[n];
                         }
                     }
                  }
                  xml.open("GET", "ajax/ajax2.php?annee="+tb1.options[tb1.selectedIndex].text, true);
                  xml.send(null);
             }
   }     
 
</script>
         
</head>

  <table width="978" border="0" cellpadding="0" cellspacing="0" align="center">
  ----

   , </td>
 
  ----

        <!--include animation -->
   <?php include "include/anim.inc.php"; ?>
    <!--fin include animation -->
   ,
       

    Sélection :

   

    <table width="100%" border="0">
     
      <form name="formulaire" method="get" action="test_ajax/selection2.php">
      ----

       , Année</td>
        Mois,
        &nbsp;,
     
      ----

       
<?php

  $co= mysql_connect("", "", "");
  $dbnom="";
  $db=mysql_select_db($dbnom,$co);
  mysql_query("SET NAMES 'utf8'");
  //==========================================  //on affiche dans un select du champs 1
  //==========================================
  $res=mysql_query("SELECT annee FROM photos GROUP BY annee",$co);
  $max=@mysql_num_rows($res);
 
 
?>
        
<select   name="tb1" id="tb1" size=1 onChange='appel();'>
<option selected="selected" value="Toutes">Toutes</option>
<?php
     for ($nb=0;$nb<$max;$nb++)
   {  $i=mysql_result($res,$nb,"annee");
      echo '<option>'.$i.'</option>';
    }
?>
</select>,

        <select name="tb2" size=1 class="liste2" id="tb2" onChange='appel2();'>
<option selected="selected" value="Tous">Tous</option>
</select>,
        <?php    mysql_close($co); ?>,
     
      ----

        ,
        &nbsp;,
        &nbsp;,
     
   

   

    </select>
   

   
</td>
    <td width="113" align="left" valign="top" class="droite"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" align="left" valign="top" class="fondmenu"></td>
  </tr>
  <tr>
    <td height="51" colspan="3" align="left" valign="top" class="">
    <!--include menu -->
   <?php include "include/menu.inc.php"; ?>
    <!--fin include menu -->
    </td>
  </tr>
  <tr>
    <td height="99" colspan="3" align="left" valign="top" class="footer"></td>
  </tr>
</table>

</td>
</tr>
</table>

</html>
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
8 déc. 2008 à 14:19
certes, certes....
et comment on teste ?
ou comment devine-t-on
le contenu des $variables,
celui de ta base de données,
celui des include en php ...
met nous donc UN EXTRAIT de la page html résultante
UN EXTRAIT, le nécessaire, toute le nécessaire... mais pas plus ! 
sinon, je t'assure que c'est décourageant !

          [mon Site] [M'écrire] Bul         
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
FRED0181 Messages postés 6 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 10 décembre 2008
8 déc. 2008 à 14:27
Je comprends!!

Il n'y a aucune erreur d'include php ni de liaison avec ma base de données.

Meilleure solution :
Tous ce passe ici sur mon site :http://www.mazamet-montagne-noire.fr/selection.php

J'ai donc en ligne une page php (selection.php) sans doctype, les listes fonctionnent sous firefox mais pas sous IE.
Et donc en rajoutant un doctype, elles ne fonctionne plus.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
8 déc. 2008 à 14:32
donc, pour toi, c'est à moi de faire l'effort,
d'aller sur ton site, de décortiquer tout pour en extraire le nécessaire
et de te fournir la solution....
( d'autant que je crains que comme d'hab, foultitude de .js, de .css ... de [i]frame,
  de flash... et autres joyeusetés ... )

          [mon Site] [M'écrire] Bul         
0
FRED0181 Messages postés 6 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 10 décembre 2008
8 déc. 2008 à 14:40
Tu me demande de fournir des éléments pour comprendre, il n'y a pas mieux que te donner une adresse où tout est en ligne.

Je ne peut pas posté ici plus d'élements qui permettraient de comprendre ce problème.

Je ne t'es pas demandé de trouver la solution, tu es venu de toi même répondre à ce post pour je crois "aider les persones qui postent'.

Je n'attends pas qu'une personne passe son temps à faire l'effort de me donner la solution toute cuite, ma démarche est juste de montrer mon problème de façon concrète et au cas où une personne à rencontré le même problème, alors elle me répondra rapidement.

Il me semble que de voir le résultat en ligne est quelque chose de très rare sur les forums.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
8 déc. 2008 à 14:45
c'est comme tu le sens...
>>le résultat en ligne est quelque chose de très rare
lance ton appli,
visualise la source ( affichage / code source )
ou fichier / enregistrer sous
puis extrait le nécessaire

          [mon Site] [M'écrire] Bul         
généralement, mettre en forme sa question fait souvent

    qu'on résout seul d'ailleurs.
0
FRED0181 Messages postés 6 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 10 décembre 2008
10 déc. 2008 à 20:02
Salut!!

Je viens d'essayer ta fonction appel() et çà marche!!!
Nickel!!!
Alors en fait c'était donc bien la récupération des objets qui était était défaillante!!

Je te remercie beaucoup pour ta réponse efficace.
0
Rejoignez-nous