begin process at 2010 09 06 07:13:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Web 2.0

 > 

Ajax

 > 

problème AJAX entre FF et IE


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

problème AJAX entre FF et IE

samedi 16 décembre 2006 à 21:22:39 | problème AJAX entre FF et IE

AlBud

Salut à tous,

J'ai pas l' habitude de poster mais la je butte depuis plusieurs jours sur un problème AJAX;
Ca m'enlèverai une grosse épine du pied si quelqu'un aurais une solution car ce code fonctionne en partie sous firefox mais pas sous IE :-(

J'ai une base contenant 3 tables: JEU, PLATEFORME et STANDARD
Un jeu c'est juste un id avec un nom de jeu
Une plateforme c'est aussi un id avec un nom de plateforme (x-box, ps1..)
Un standard c'est juste le lien entre un jeu et 0 ou n plateformes

Il y a une page qui me permet de d'ajouter mes plateformes à un jeu, cette page ne pose aucun problème par contre dans une autre page j'essaie de pouvoir ajouter dynamiquement x lignes de jeu et choisir la plateforme parmis celle existantes pour ce jeu et pour ce jeu uniquement donc j'utilise AJAX. Il y a des centaines de jeux dans la base et 10 fois plus de standards...impossible de tout stocker dans une page ... AJAX semble être la solution à condition que j'y arrive.

Vous aller mieu comprendre avec ceci, je vous donne la création de la "base" (attention j'ai mis un user et un password à vous de le redefinir dans les pages php), des données et les 2 pages nécessaires : index.php et liste_ajax.php

En gros sous IE et Firefox, je peux ajouter mes lignes dynamiquement via javascript, là où sa bloque c'est que pour x lignes ajoutées correspond x standards différents, là ca fonctionne sous FF mais sous IE la liste reste desespérement vide, j'ai essayé avec un DIV mais comme il faudrait que je crée dynamiquement des DIV ca semble poser des problème avec INNERHTML, j' ai donc contourner cela en prenant l' id de ma balise select

Enfin mon dernier problème est que chaque fois que j'ajoute une ligne, je perd tous mes champs plateforme qui se réinitialise alors que je voudrai qu'il reste à la donnée selectionnée, là je pense que c'est un problème de code, mais je sèche aussi.

--
-- CREATION DE LA BASE DE DONNEE ET DU CONTENU
--

CREATE TABLE `jeu` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `jeu` varchar(70) collate latin1_german1_ci NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=5 ;


INSERT INTO `jeu` (`id`, `jeu`) VALUES
(1, 'Need For Speed'),
(2, 'Burning Revenge'),
(3, 'Ninja Wars'),
(4, 'Gates of Thunder');


CREATE TABLE `plateforme` (
  `id` int(11) NOT NULL auto_increment,
  `plateforme` varchar(30) collate latin1_german1_ci NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=8 ;


INSERT INTO `plateforme` (`id`, `plateforme`) VALUES
(1, 'Super Nintendo'),
(2, 'PS1'),
(3, 'Sega Mega-CD'),
(4, 'PS2'),
(5, 'X-box'),
(6, 'Sega 32X'),
(7, 'Game Boy Advance');


CREATE TABLE `standard` (
  `id` int(11) NOT NULL auto_increment,
  `id_jeu` int(11) NOT NULL default '0',
  `id_plateforme` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=9 ;


INSERT INTO `standard` (`id`, `id_jeu`, `id_plateforme`) VALUES
(1, 1, 2),
(2, 1, 3),
(3, 1, 7),
(4, 2, 1),
(5, 2, 4),
(6, 3, 5),
(7, 3, 7),
(8, 4, 6);

--
-- PAGE A NOMMER index.php
--

<?php
$user="ajax";
$host="localhost";
$password="ajax";
$database="base";
$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");  
mysql_select_db($database,$connexion);

$sql_plf = "SELECT id, plateforme  FROM plateforme ORDER BY plateforme";
$res_plf = mysql_query($sql_plf);

$sql_jeu = "SELECT id, jeu  FROM jeu ORDER BY jeu ";
$res_jeu = mysql_query($sql_jeu);

?>

<script type="text/javascript">
var tab = new Array(0); // tableau contenant les id des jeux et plateforme
var tab_plf = new Array(0); // tableau des id des plateformes
var tab_jeu = new Array(0); // tableau des id des jeux

function Ajouter() {
  tab.push(tab.length);
  tab_jeu.push("");
  tab_plf.push("");
  Afficher();
}

function Afficher() {
  document.getElementById('std').innerHTML="";
  for (intI=0;intI<tab.length;intI++) {
    document.getElementById('std').innerHTML+= ListeBoxJeu(tab[intI], tab_jeu[intI]) + ' ';
 document.getElementById('std').innerHTML+= ' ' +ListeBoxPlf(tab[intI], tab_plf[intI]) +'  <a href="javascript:Supprimer('+intI+')">Supprimer</a><br/><br/>';

  }
}

function SaveValue(arr,intId,strValue) {
  arr[intId]=strValue;

function ListeBoxJeu(id,value) {
    var xe = 0;
 var str;
 str = 'Jeu <select size=1 name="jeu_'+id+'" id="jeu_'+id+'" OnChange="sendData(\'id=\'+ this.value+\'&amp;pos='+id+'\',\'liste_ajax.php\','+id+');SaveValue(tab_jeu,'+id+',this.value);" onKeyUp="sendData(\'id=\'+this.value+\'&amp;pos='+id+'\',\'liste_ajax.php\','+id+');">';
    str += '<option value="-1">';
    <?php
 while ($row = mysql_fetch_assoc($res_jeu)) {
  ?>
  xe = <?php echo "$row[id]"; ?> ; 
  xl = "<?php echo $row[id].'-'.$row[jeu]; ?>" ; 
  str += '<option value="'+xe+'"';  
  if ( xe == value) {
   str += 'selected';
  }
  
  str += '>'+xl;
  <?php
 }
 ?>
 str += '</select>';
 return str;
}

function ListeBoxPlf(id,value) {
    var xe = 0;
 var str;
 str = 'Plateforme <select size=1 name="plateforme_'+id+'" id="plateforme_'+id+'" onChange="javascript:SaveValue(tab_plf,'+id+',this.value)">';
    str += '<option value="-1">';
    <?php
 while ($row = mysql_fetch_assoc($res_plf)) {
  ?>
  xe = <?php echo "$row[id]"; ?> ; 
  xl = "<?php echo $row[plateforme]; ?>" ; 
  str += '<option value="'+xe+'"';  
  if ( xe == value) {
   str += 'selected';
  }
  
  str += '>'+xl;
  <?php
 }
 ?>
 str += '</select>';
 return str;
}

function Supprimer(intId) {
  if (tab.length > 0) {
     tab.pop();
  tab_jeu.splice(intId,1);
  tab_plf.splice(intId,1);
  }
  Afficher();
}

function sendData(param, page, id)
{
 if(document.all)
 {
  //Internet Explorer
  var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
 }//fin if
 else
 {
  //Mozilla
  var XhrObj = new XMLHttpRequest();
 }//fin else

 //définition de l'endroit d'affichage:
 var content = document.getElementById('plateforme_'+id);
 
 XhrObj.open("POST", page);

 //Ok pour la page cible
 XhrObj.onreadystatechange = function()
 {
  if (XhrObj.readyState == 4 && XhrObj.status == 200)
   content.innerHTML = XhrObj.responseText ;
 }

 XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 XhrObj.send(param);
}//fin fonction SendData

</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " [ Lien ]">
<html xmlns=" [ Lien ]">

<head>

<title>Exemple AJAX</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="imagetoolbar" content="no" />
<meta content="TRUE" name="MSSmartTagsPreventParsing" />

</head>

<body border="1px dashed #999" bgcolor="#D7D7FF">
<form name="essai" action="valider.php" method="post">
<table>
 <tr >
  <td >
  <p id="std" ></p>
  <a href="javascript:Ajouter()">Ajouter un standard</a>
  </td> 
 </tr>
 <tr valign="top">
  <td align="center"><input type="submit" value="Valider" ></td>
 </tr>
</table>
</form>
</body>
</html>


--
-- PAGE A NOMMER liste_ajax.php
--
<?php
header('Content-type: text') ; // on déclare ce qui va être afficher
 
// test des POST emis
if(isset($_POST['id']) && !empty($_POST['id']) ){
   $pos = $_POST['pos'];
   $user="ajax";
   $host="localhost";
   $password="ajax";
   $database="base";
   $connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");  
   mysql_select_db($database,$connexion);
    $rq="Select id_plateforme, plateforme from standard, plateforme where standard.id_plateforme = plateforme.id and standard.id_jeu=".$_POST['id']." ORDER BY plateforme;";
    $result= mysql_query ($rq) or die ("Select impossible");
     // $i = initialise le variable i
    $i=0;
 if (mysql_num_rows($result)>0)
 {
   //echo "<select size='1' name=\"plateforme_$pos\">";
 }
 else
 {
   echo utf8_encode("Indisponible"); 
 }
    while ($dt=mysql_fetch_row($result))
    {  
  echo "<option value=".$dt[0].">".$dt[0].'-'.$dt[1]."<br/>";
    }   
 //echo "</select>";
}

?>

Un grand merci à ceux qui m'aideront, car je crois que je vais pas y arriver tout seul, si vous avez aussi un meilleur code pour faire la même chose, je suis preneur...

mardi 19 décembre 2006 à 02:07:15 | Re : problème AJAX entre FF et IE

rubiks10

Membre Club
Salut

Ben tout d'abord je ne comprends pas du tout le fonctionnement de ton application...

Puis ton script n'est pas du tout mais alors pas du tout conforme!!!!
Les scripts se place soit dans le head de l'html (conseillé pour tout ce qui est ajax) ou alors dans le body aux endroits voulus... mais en aucun cas au début et n'importe où...

puis si tu veux que ta fonction onreadystatechange soit utilisée alors il faut que tu utilises le mode asynchrone de ajax !!! c'est à dire en ajoutant le paramètre true dans la fonction OPEN de l'objet ajax.

Puis j'avais jamais vu qu'on mettait du javascript dans le href !!! soit utilise la balise onclick="ta fonction()" ou alors href="javascript:ta fonction()" mais pas href="fonction()" ...

puis meme si cela ne fonctionne pas sous IE car on a pas le droit de changer le innerHTML d'une balise select (donc il faut générer entierement le select et pas seulement les options ), donc oui ... meme si l'aspect graphique ne fonctionne pas sous IE l'aspect application ne fonctionne mais alors pas du tout sous mozilla non plus...  les selects sont modifiés on ne sait pourquoi puis lorsque on change le suivant ca remet a 0 le précédent etc....

Donc je pense avant de penser à l'aspect graphique tu devrais regarder les problèmes lourds (pb d'appli pure)

voilà donc a la rigueur explique vraiment ce que tu veux que ca te fasses car pour ma part j'ai pas trop compris, j'y ai cru au début mais en fait non...

voilà @+

-- The Rubik's Man --
mardi 19 décembre 2006 à 15:49:06 | Re : problème AJAX entre FF et IE

AlBud

Merci pour ta réponse, j'ai essayé plusieurs autres méthodes mais sans aboutir. Pour ce que tu as décrit dans HEAD, tu as raison mais il faut savoir que l'appli est plus important j'ai donc recréer 2 pages qui fonctionne comme sous l'autre interface mais en + light donc c'est vrai que j'ai pas trop fait gaffe où je mettais quoi mais le problème est toujours là.

Pour le href est la fonction je l'utilise souvent, je ne sais pas si tu as pu executer la création de la table et les 2 scripts, tu verra ce que ca donne.

J'ai aussi essayer bien sur avec le SELECT mais le blème est qu'il impose que je mettai un DIV et donc créer des DIV dynamiquement j'ai essayé et ca le fait pas vraiment.

c'est difficile à expliquer sans que tu l'exécuter toi même, mais je vais essayer.
Au départ j'ai une ligne avec 2 listes box : jeu_1 et plateforme_1, à coté j'ai la possibilité de supprimer la ligne et en dessous je peux ajouter une nouvelle donc jeu_2 et plateforme_2 et ainsi de suite.

Si je choisi un jeu dans la première liste jeu_1 alors la liste plateforme_1 doit ne m'affiche que les plateformes qui la lie à ce jeu par exemple pour mon exemple : le jeu Need for Speed affichera dans plateforme PS1,Sega Mega-CD, Game Boy Advance. Donc si je vais sur la ligne 5 ème ligne JEU_5, le champ plateforme_5 affichera les plateforme correspondant au JEU_5.

Et ca je n'y arrive pas du tout du moins en AJAX car autrement je peux bien ajouter les lignes dynamiquement ligne par lignes mais pas actualisé la xème liste box plateforme en fonction de la xème ligne jeu.

Merci pour ton aide.

mardi 19 décembre 2006 à 16:29:54 | Re : problème AJAX entre FF et IE

rubiks10

Membre Club
Si ca marche a peu près sous firefox mais comme je t'ai dis il faut que tu rajoutes le paramètre "true" a la fonction open de l'objet ajax.

 XhrObj.open("POST", page);   ==>    XhrObj.open("POST", page,true);

mais sinon c'est quoi le but exact?? car j'ai examiné ton code et étant développeur javascript je ne comprends pas du tout le but de tout ca. ca te sert a quoi exactement ? car j'ai vu que tu fais une modification lorsque tu choisis aussi la plateforme... et je vois pas pourquoi.

Ben explique moi vraiment ce que tu veux !!! un petit cahier des charges quoi... et si tu veux ce weekend si j'ai 1h de libre je te ferai tout ca. Mais comme je t'ai dit il faut que je comprene avant le but. par exemple quels sont les traitements lors de la validation du formulaire??? car tu n'en parles pas...

Voila
@+
-- The Rubik's Man --
mardi 19 décembre 2006 à 19:55:23 | Re : problème AJAX entre FF et IE

AlBud

En fait je tiens un site d'ancien jeu et je voudrais passer complétement en PHP mais il me manque juste ce petit truc pour tout boucler, bref la haine.

oui j'ai mis bien sur TRUE et ca ne change rien, j'ai l'impression qu'il faille absolument définir un DIV pour IE, sans quoi c'est difficile pour lui de recevoir la réponse de l'objet AJAX, alors je dis pourquoi pas mais comment générer des DIV dynamiquement;

Voici 2 exemples tu vas comprendre:
Le premier c'est le code que j'ai mis sur le site avec la condition true en plus que tu m'as donné:
[ Lien ]

Tu vois on peux ajouter plusieurs lignes et choisir le jeu mais la plateforme reste vide.

Par contre, regarde autre exemple si je défini un DIV dans le code, quand je choisi un jeu, je peux voir les plateforme disponible pour ce jeu et c'est exactement ce que je veux mais dans la liste déroulante plateforme et non toujours dans le même DIV en haut à gauche
[ Lien ]

Sympa de m'aider en tout cas car pour le moment aucune réponse nulle part :-(

mardi 19 décembre 2006 à 20:22:45 | Re : problème AJAX entre FF et IE

rubiks10

Membre Club
Ben oui je sais bien que sous IE ca fonctionne mais ce que je voulais te dire c'est que maintenant dans firefox et pas IE on peut voir que ta requêtes ajax fonctionne bien car sous firefox la mise à jour des select ca marche directement par un innerHTML.

Bon par contre tu ne m'as pas répondu pour tout le fonctionnement et l'intérêt de tout ca ? c'est quoi le but ici d'associer un jeu avec une plateforme qui lui est déja propre ??? en fait ce que je te demande c'est qu'est que tu fais dans la page valider.php ??? qu'est-ce que tu fais quand on valide le formulaire ???

Car c'est très mal codé et expliqué et donc pour t'aider ( te filer un code correct et fonctionnel ) j'ai besoin de comprendre ce que tu veux... mais comme les traitements faits après la validation ne sont pas indépendants de la façon d'implémenter ton système et donc il faut que je saches de quoi je parle...

voilà et ensuite je te referai tout ca sans problèmes

@+
-- The Rubik's Man --
mardi 19 décembre 2006 à 20:34:03 | Re : problème AJAX entre FF et IE

AlBud

En fait un jeu a 0 ou n plateforme, le code que j'ai mis concerne une page sur des personnes qui bosse sur un jeu. Une personne peut bosser sur X jeu et sur un même jeu sur plusieurs plateformes. Il faut savoir qu'un même jeu a souvent été codé par divers personnes suivants les plateformes. Dans cette page tu n'a pas le code où je peux mettre un nom et prenom et ensuite paf la sélection dynamique Jeu et plateforme comme ca quand je peux afficher qui a fait quoi sur un jeu et surtout sur quel standard.

Valider.php c'est juste une récupération du nom et prénom de la personne que j'insére dans une table "personne", puis les liens dynamiques jeu et plateforme je les mets dans une nouvelle table "travaux" où je place l'id de la personne, l'id du jeu et l'id de la plateforme et x fois suivant le nombre de ligne inséré.

Tu vois un peu ?


Cette discussion est classée dans : jeu, id, tab, str, plateforme


Répondre à ce message

Sujets en rapport avec ce message

Problème de tableaux [ par zzzzzz ] Yep :)JE suis confronté a un problèmne byzare....J'ai une page complete avec une partie :echo "id['result1']!!!!!!!!!!!!!!! : ".$id['result1'].""; //a Probleme de tableaux à deux dimensions [ par ldevun ] Bonjour,J'ai regardé des exemples sur des sites pour les tableaux à deux dimensions mais j'ai un probleme, (dans les exemples que j'ai vu, les valeurs class et session [ par gabs77 ] slt, j'ai un pb g une page (classe.php) qui possede toutes les fonctions appartenant a une classe cartet g une page qui construit la classe (ajouter.p Jeu de l'erreur.. [ par syndrael ] Bonjour, Je suis sur MySQL 4.1 et j'ai une erreur avec cette requete, pourriez vous m'indiquer ce qui ne va pas. J'en ai fait des dizaines comme celle authentification [ par ferjani69 ] mon probleme est lors de l authentification la verification de login et de mot passe ne passe pas et je ne sais pas c koi  le pb exactement voila ma p Last_insert_id() ok en local mais ne marche pas chez 1and1 [ par lolowar ] Bonjour, je viens pour la deuxième fois demander de l'aide ici car j'ai un petit problème et j'ai beau me casser la tête, pas moyen...Alors voila, tou Corrélation entre différente table [ par Rouk ] Bonjour, Je souhaiterai optimiser mon code, il fonctionne actuellement mais je sais qu'il n'est pas correct. En effet, je n'utilise pas de clé second Problème avec LEFT JOIN MYSQL [ par kirk57 ] Bonjour, J'ai 2 tables pour gérer le multilangue de l'interface et des pages "statiques" sur mes sites. La première gère les clefs, la deuxième gère l Requête introuvable ... [ par cdie ] Chers amis développeurs, bonjour, Je vous écris car je travaille actuellement sur un site pour un projet et j'avoue que je ne trouve pas une requête. Bouton Suivant / Précédent [ par brascoman ] Bonjour, avant tout je veux vous dire que je débute en php !! En fait j'ai un soucis à faire un lien "page suivante" et "page précédente" ! Je vous


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales