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 12/01/2011, 18h07   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 18
Points : 1
Points : 1
Par défaut Message d'erreur avec IE : "Erreur non spécifiée"

Bonjour

mon programme fonctionne sans erreur sous Firefox mais génère
le message d'erreur "Erreur non spécifiée" sur la ligne de test :
if (xmlHttp.status == 200)

au niveau de

Code :
1
2
3
4
5
if (xmlHttp.readyState == 3) {
  if (xmlHttp.status == 200) {
		document.getElementById( 'divMess' ).innerHTML =xmlHttp.responseText;
  }
}
comment résoudre ce problème de compatibilité

merci pour d'avance

jean-Marie

----------------------------------------------------------------------
pour info je vous donne l'ensemble du programme, l'erreur étant peut-être
à un autre niveau :


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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
var xmlHttp;
 
//
// fonction d'obtention de l'objet XMLHttpRequest
//
 
function getXmlHttpRequestObject()
{
 // déclaration de la référence à l'objet XMLHttpRequest
 var xmlHttpObject;
 if (window.XMLHttpRequest)
    // le navigateur est Internet Explorer 7 ou plus récent, Mozilla, Safari, etc.
    {
     // on essaie d'obtenir un objet XMLHttpRequest
	 try {
	   xmlHttpObject = new XMLHttpRequest();
	 }
	 // echec 
	 catch(e) {
        xmlHttpObject = false;
     }
   }
 else
    // le navigateur est Internet Explorer 6 ou plus ancien
    {
     // on essaie d'obtenir un objet ActiveXObject, équivalent de l'objet XMLHttpRequest
	 try {
	   xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
	 }
	 // echec 
	 catch(e) {
        xmlHttpObject = false;
     }
}
 // retour de l'objet créé ou affichage d'un message
 return xmlHttpObject;
}
 
 
 
//
// fonction de lancement d'une requête HTTP asynchrone Ajax
//
function requeteAjax()
{
 // tentative d'obtention de l'objet XMLHttpRequest
 xmlHttp = getXmlHttpRequestObject();
 
 if (xmlHttp)
    {
	 // test si l'objet xmlHttp est non initialisé ou disponible (prêt)
	 if (xmlHttp.readyState == 0 || xmlHttp.readyState == 4)
	    {
		 // assignation de la fonction de traitement de la réponse du serveur lorsque le serveur est prêt à envoyer les données mises à jour
		 xmlHttp.onreadystatechange = traitementReponseServeur;
		 //  identification du mode de passage, de l'URL du serveur, le dernier paramètre et du type de transmission : true pour asynchrone
		 var url = "http://localhost/cgi-bin/obs/obshttp_ajax.pl"; 
		 xmlHttp.open("GET", url, true); 
		 // envoi de la requête au serveur, paramètre à null si méthode GET ou méthode POST sans variables à transmettre
		 if(typeof console == 'object') console.log("avant xmlHttp.send");
		 xmlHttp.send(null);
		  if(typeof console == 'object') console.log("après xmlHttp.send");
		}
		else
		// rafraîchissement au bout de 100 millisecondes soit un centième de seconde
		setTimeout("requeteAjax()", 1000);
 
   }
}
 
 
 
//
// fonction de traitement de la réponse du serveur
//
 
function traitementReponseServeur()
 
{
 if (xmlHttp.readyState == 3) {
	if (xmlHttp.status == 200) {
		document.getElementById( 'divMess' ).innerHTML =xmlHttp.responseText;
	}
 }
 
 // test si la transaction est terminée
 
 if (xmlHttp.readyState == 4)
	{
	  if(typeof console == 'object') console.log("début traitementReponseServeur : xmlHttp.status = ",xmlHttp.status);
	 // test si la transaction a réussi
     if (xmlHttp.status == 200)
	    {
		  if(typeof console == 'object') console.log("xmlHttp.readyState == 4 && xmlHttp.status == 200");
		 // relance de la requête 
	     setTimeout("requeteAjax()", 100);
		}
	 else
	    alert("Problème d'exécution : xmlHttp.status = ",xmlHttp.status);
}
}
Jean-Marie64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 11h28   #2
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
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 572
Points : 4 073
Points : 4 073
> Pourquoi déclenches-tu le traitement sur un readyState à 3 ? (c'est à "4" que la réponse est complète et exploitable)

> quand tu testes le status, inclus la possibilité d'un code == 0, ça peut correspondre à un retour OK aussi ^^
__________________

...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 13/01/2011, 14h10   #3
Invité de passage
 
Inscription : octobre 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 18
Points : 1
Points : 1
je déclenche le readState à 3 pour recevoir "en temps réel" les informations
envoyées par l'exécution du script perl :
http://localhost/cgi-bin/obs/obshttp_ajax.pl
celui-ci envoie des messages pendant 30 secondes puis se termine ;
mais nous ne voulons pas attendre qu'il se termine (readState à 4) pour
récupérer ces informations

je prends note pour le code == 0

mais je ne vois pas le rapport avec l'erreur que j'ai avec IE

JM
Jean-Marie64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 14h53   #4
Invité de passage
 
Inscription : octobre 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 18
Points : 1
Points : 1
je remarque effectivement que si je commente les lignes suivantes :
Code :
1
2
3
4
5
// if (xmlHttp.readyState == 3) {
//	if (xmlHttp.status == 200) {
//		document.getElementById( 'divMess' ).innerHTML =xmlHttp.responseText;
//	}
//}
et que je passe directement à :
Code :
if (xmlHttp.readyState == 4)
je n'ai plus l'erreur mais les comportements de Firefox et IE sont différents :

-dans le cas de Firefox, l'affichage des informations se produit toutes les 30 secondes (puisque le perl se termine au bout de 30 sec)
-dans le cas de IE l'affichage ne se produit qu'une fois !

le débugger montre que :
-côté Firefox, le navigateur est attente de terminaison du script :
http://localhost/cgi-bin/obs/obshttp_ajax.pl
à chaque appel de requeteAjax()

-IE par contre va attendre la terminaison du script la 1ère fois puis boucle
très rapidement sur la requête :
http://localhost/cgi-bin/obs/obshttp_ajax.pl
et ne met plus à jour l'affichage
Jean-Marie64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h17.


 
 
 
 
Partenaires

Hébergement Web