Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2008, 14h31   #1
C_C
Membre du Club
 
Inscription : novembre 2005
Messages : 139
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 139
Points : 55
Points : 55
Envoyer un message via MSN à C_C
Par défaut IE me coupe ume partie du code HTML renvoyé par AJAX

Salut,

J'ai sur ma page deux listes où les résultats de la seconde dépendent de ce qui est sélectionné dans la premiére. Pour cela j'ai une fonction ajax qui fonctionne bien sur firefox mais pas sur IE.
Ce qui arrive c'est que dans le innerHTML, sur IE, la fonction ajax ne met pas tout le code HTML que je veux.
Au lieu de metre ce code:
Code :
<option value="1">texte a mettre ici</option>
Elle met juste celui-ci:
Code :
texte a mettre ici</option>

Voici ma fonction Ajax
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function updateSpecie()
{	
 
   		var xhr_object = null;			
		try
		{
		  // Firefox, Opera 8.0+, Safari
		  xhr_object=new XMLHttpRequest();
		}
		catch (e)
		{
		  // Internet Explorer
		  try
		  {
			  xhr_object=new ActiveXObject("Msxml2.XMLHTTP");
 
		  }
		  catch (e)
		  {
			  try
			  {
				  xhr_object=new ActiveXObject("Microsoft.XMLHTTP");
			  }
			  catch (e)
			  {
				  alert("Your browser don't support AJAX!");
				  return false;
			  }
		   }
		}
		xhr_object.open("POST", "actions/update.php", true);
 
		xhr_object.onreadystatechange = function()
		{
 
			if(xhr_object.readyState == 4)
			{
				alert(xhr_object.responseText);
		  		document.getElementById("species").innerHTML = xhr_object.responseText;
 
			}
 
 
	   	}
 
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
	    var data = "type="+escape(list.options[index].value);
 
	    xhr_object.send(data);
 
	}
}
Et la partie du code HTML qui doit être changée:
Code :
1
2
3
4
5
6
7
8
9
 
<tr>
     <td>Espèces:</td>
     <td>
          <select id="species">
              <option value="-1"></option>
           </select>
      </td>
</tr>
Est-ce que quelqu'un a une idée de ce qu'il faut faire pour corriger cela?

Merci d'avance.
C_C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2008, 20h57   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 314
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 314
Points : 8 597
Points : 8 597
Ce que tu reçois de la page actions/update.php, c'est du vrai XML bien formé ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 21h56   #3
C_C
Membre du Club
 
Inscription : novembre 2005
Messages : 139
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 139
Points : 55
Points : 55
Envoyer un message via MSN à C_C
Oui le XML est bien formé.
Voici le code du fichier actions/update.php qui renvoi le code.
Code :
1
2
3
4
5
6
7
 
if(sizeof($species)>0)
{
        echo "<option value=\"\"></option>";
	foreach($species as $row)
		echo "<option value=\"".$row->id."\">".$row->name."</option>";
}
C_C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 11h46   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 314
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 314
Points : 8 597
Points : 8 597
Comment tu sais que ton code Ajax ne mets que "texte a mettre ici</option>" au lieu de "<option value="1">texte a mettre ici</option>" ? Tu as fait un alert(xhr_object.responseText) pour vérifier ce que reçoit IE ? Tu peux nous montrer ce que ça affiche ? Il manque peut-être l'entête XML <?xml ...?>
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 15h52   #5
C_C
Membre du Club
 
Inscription : novembre 2005
Messages : 139
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 139
Points : 55
Points : 55
Envoyer un message via MSN à C_C
En effet le xhr_object.responseText n'a pas l'entête xml mais est-ce qu'il doit l'avoir?
J'ai fait des alert pour voir ce que cela renvoyait et pour alert(xhr_object.responseText) j'ai ceci:
Code :
1
2
3
4
 
<option value=""></option>
<option value="1">abcd</option>
<option value="2">efgh</option>
Lá tout va bien.
Après, dans ma fonction ajax j'ai cette ligne de code:
Code :
document.getElementById("species").innerHTML = xhr_object.responseText;
Et après cette ligne je fait un nouveau alert ao innerHTML:
Code :
alert(document.getElementById("species").innerHTML);
Et j'obtiens cela:
Code :
abcd</option><option value="2">efgh</option>
Comme on peut voir, il y a bout du code HTML qui a disparu.
C_C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 17h23   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 314
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 314
Points : 8 597
Points : 8 597
C'est plutôt ballot, en effet. Tu peux essayer en ajoutant l'en-tête XML ?

Fais aussi un alert(document.getElementById("species").innerHTML) avant de le changer, pour voir
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 18h22   #7
C_C
Membre du Club
 
Inscription : novembre 2005
Messages : 139
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 139
Points : 55
Points : 55
Envoyer un message via MSN à C_C
En faisant un alert(document.getElementById("species").innerHTML) avant de changer le innerHTML le résultat est un peu bizarre:
Code :
<OPTION value=-1 selected></OPTION>
Est-ce que ce résultat est logique?
C_C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 20h53   #8
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 314
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 314
Points : 8 597
Points : 8 597
C'est pas choquant, au selected près, c'est ce que tu as. Mais je ne comprends toujours pas le pb.

Bon, t'es pas le seul à avoir le pb : http://muffinresearch.co.uk/archives...nerhtml-in-ie/. Visiblement, le seul contournement possible, et de toute façon, c'est la meilleure façon de faire, c'est de faire une boucle pour parcourir les options et les rajouter dans le select
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 15h52   #9
C_C
Membre du Club
 
Inscription : novembre 2005
Messages : 139
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 139
Points : 55
Points : 55
Envoyer un message via MSN à C_C
Merci pour ton aide. Je vais essayer ces alternatives qui sont proposées par le lien aussi e je verrai si elles produisent le résultat correct.
C_C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h14.


 
 
 
 
Partenaires

Hébergement Web