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 26/11/2010, 10h50   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 70
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 70
Points : 15
Points : 15
Par défaut Le code s'arrête à xhr_object.readyState = 3

Bonjour,

J'ai un problème pour afficher mes données avec AJAX : j'ai l'impression que mon traitement se bloque quand xhr_object.readyState = 3.

Chose étrange mon traitement fonctionne bien sur FIREFOX V2,
mais pas sur Chrome ni sur IE.
Ce problème vous parle t il ?

Voici mon code :

Fichier HTML :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
<html>
<head>
<script type="text/javascript" src="code_js.js"></script>
</head>
<BODY onLoad="Chargement('pseudobox3');" >
 
	<div class=text id="pseudobox3"></div>
 
</body>
</html>

Fichier JS :

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
 
function Chargement(f) {
 
		var xhr_object = null;
 
		if(window.XMLHttpRequest) // Firefox
			xhr_object = new XMLHttpRequest();
		else if(window.ActiveXObject) // Internet Explorer
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		else { // XMLHttpRequest non supporté par le navigateur
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
			return;
		}
 
		alert(f);
 
		xhr_object.open("POST", "load-data.php", true);
 
		xhr_object.onreadystatechange = function anonymous() {
			if(xhr_object.readyState == 4)
				{
				eval(xhr_object.responseText);
				alert(xhr_object.responseText); 
				writediv(xhr_object.responseText,f);
				}
                           else
				{alert(xhr_object.readyState); }
		}
 
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		var data = "form="+f.name+"&select=list1";
		xhr_object.send(data);
 
}
jerem_orga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 10h56   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 789
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 789
Points : 35 781
Points : 35 781
Code :
var data = "form="+f.name+"&select=list1";
C'est quoi exactement f.name ???
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 11h23   #3
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 70
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 70
Points : 15
Points : 15
Par défaut finalement ça envoie 4 ...

Code :
>>>>var data = "form="+f.name+"&select=list1";
Dans ce cas, les valeurs envoyées ne correspondent pas au fichier html présenté,
et ne sont pas exploitées par le fichier PHP.


Sinon,
il semblerait que je me sois trompé, le alert(xhr_object.readyState); me renvoie "4",
mais n'affiche pas le contenu du résultat de ma requête sur Chrome, IE et la dernière version de FireFox.
jerem_orga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 11h44   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 789
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 789
Points : 35 781
Points : 35 781
Citation:
Envoyé par Bovino
C'est quoi exactement f.name ???
D'où ma question

Je serais très étonné que f.name corresponde à quoi que ce soit !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 12h03   #5
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 570
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 570
Points : 4 070
Points : 4 070
Citation:
Envoyé par Bovino Voir le message
Je serais très étonné que f.name corresponde à quoi que ce soit !
+1

@jerem_orga : ton paramètre f ne contient qu'une chaine ("pseudobox3" dans ton exemple). Tu essaies ensuite d'accéder à une supposée propriété name de cette chaine... ?
Si c'est à la div que tu veux accéder, fais un getElementById sur ton paramètre f, mais je ne vois toujours pas le rapport avec name
Au final, que veux-tu envoyer comme paramètre form quand tu fais ton appel ajax ? (en gros, qu'attend le serveur de l'autre cote ? un nom de formulaire ?)
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 12h15   #6
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 70
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 70
Points : 15
Points : 15
Tout d'abord merci pour vos réponses.

Excusez moi je vous ai induit en erreur avec cette ligne (que j'ai finalement mise en commentaire ... cf code ci dessous).
Dans l'exemple présenté, j'ai allégé au max le code et supprimé toute notion de formulaire.

Et au final, le alert(xhr_object.readyState); me renvoie 4.
---> et la table de données s'affiche dans FireFox V2.
---> mais ne s'affiche pas dans Chrome, IE

Donc au final, mon code JS resemble à ça :

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
 
function Chargement(f) {
 
		var xhr_object = null;
 
		if(window.XMLHttpRequest) // Firefox
			xhr_object = new XMLHttpRequest();
		else if(window.ActiveXObject) // Internet Explorer
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		else { // XMLHttpRequest non supporté par le navigateur
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
			return;
		}
 
		//alert(f);
 
		xhr_object.open("POST", "load-data.php", true);
 
		xhr_object.onreadystatechange = function anonymous() {
			if(xhr_object.readyState == 4)
				{
				alert(xhr_object.readyState);
				eval(xhr_object.responseText);
				alert(xhr_object.responseText); 
				writediv(xhr_object.responseText,f);
				}
				//else
				//{alert(xhr_object.readyState); }
		}
 
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		//var data = "form="+f.name+"&select=list1";
		var data = "";
		xhr_object.send(data);
 
}
Et mon fichier PHP (load-data.php) appelé :


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
 
<?
header('Content-type: text/html; charset=iso-8859-1');
 
$mysql_db = @mysql_connect("localhost", "root", "");
@mysql_select_db("base_test");
 
$query = "select Code1, Code2 ";
$query .= " from ... ";
$query .= " where  ... ";
//$query .= " limit 5 ";
 
$result = @mysql_query($query);
$cpt = mysql_affected_rows();
 
Echo "<table>";
Echo "<tr align='center'><td><strong>Lib 1</strong></td><td><strong>Lib 2</strong></td></tr>";
 
for ($i = 0; $i < $cpt; $i++) 
		{
			$Code1 = mysql_result($result,$i,"Code1");
			$Code2 = mysql_result($result,$i,"Code2");
 
			echo "<tr><td>$Code1</td><td align='center'>$Code2</td></tr>";
 
		}
echo "</table>";	
 
@mysql_close($mysql_db);
?>
jerem_orga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 12h25   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 789
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 789
Points : 35 781
Points : 35 781
Code :
1
2
3
xhr_object.onreadystatechange = function anonymous() {
...
}


Code :
1
2
3
xhr_object.onreadystatechange = function () {
...
}
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 12h35   #8
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 70
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 70
Points : 15
Points : 15
Je ne comprends pas trop...
et d'ailleurs ça veut dire quoi "function anonymous() " ?

En fait je suis sur une piste :

Je me rends compte que je n'arrive à afficher qu'une seule donnée depuis mon fichier PHP.
Si je laisse des ECHO comme ça, IE n'affiche rien :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Echo "<table>";
Echo "<tr align='center'><td><strong>Lib 1</strong></td><td><strong>Lib 2</strong></td></tr>";
 
for ($i = 0; $i < $cpt; $i++) 
		{
			$Code1 = mysql_result($result,$i,"Code1");
			$Code2 = mysql_result($result,$i,"Code2");
 
			echo "<tr><td>$Code1</td><td align='center'>$Code2</td></tr>";
 
		}
echo "</table>";

En revanche, si j'affiche ça, là ça marche :

Ca, ça ne marche pas non plus :

Code :
echo "$Code1 - $Code1";

Mais alors comment faire pour afficher une table de données ?

Et le pb n'arrive qu'avec IE, CHROME et les dernières version de FireForx (la version FireForx V2 sur laquelle je me trouve actuellement accepte d'afficher la table)
jerem_orga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 13h04   #9
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 70
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 70
Points : 15
Points : 15
Par défaut J'AIC ENFIN TROUVééééééééééééé !!!!

j'avais un foutu EVAL que j'avais oublié de retirer !!!!!

Code :
eval(xhr_object.responseText);
Merci pour votre aide et vos réponses.
jerem_orga 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 20h18.


 
 
 
 
Partenaires

Hébergement Web