Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources 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 10/05/2011, 17h37   #1
Candidat au titre de Membre du Club
 
Femme Amandine
Ingénieur Info. Décisionnel
Inscription : mars 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur Info. Décisionnel

Informations forums :
Inscription : mars 2011
Messages : 29
Points : 11
Points : 11
Par défaut Appel webservice depuis JS IE & FF

Bonjour à tous,

Je cherche à appeler un webservice en JavaScript.
Ce dernier ne renvoie rien et ne prend aucun paramètre.
Pour y accéder sur mon poste :
J'ai trouvé un premier code qui fonctionne sous IE, mais pas FF :
Code :
1
2
3
4
 
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM" );
        xmlDoc.async = false;
        xmlDoc.load("http://127.0.0.1:8080/Alimentation_globale_0.1/services/AA_Alimentation_globale?method=runJob" );
Pour pallier au pb de FF, j'ai trouvé ceci sur le forum :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
		var xhr = null; 
		if(window.XMLHttpRequest) xhr = new XMLHttpRequest(); // Firefox et autres
		else if(window.ActiveXObject)
		{ // Internet Explorer 
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		else 
		{ // XMLHttpRequest non supporté par le navigateur 
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
			xhr = false; 
		}
Mais, je n'arrive pas à l'adapter.

Merci de bien vouloir m'aider.
logicanalyse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 09h47   #2
Candidat au titre de Membre du Club
 
Femme Amandine
Ingénieur Info. Décisionnel
Inscription : mars 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur Info. Décisionnel

Informations forums :
Inscription : mars 2011
Messages : 29
Points : 11
Points : 11
Par défaut Encore besoin d'un coup de pouce

J'ai finalement trouvé une solution, mais il me faut encore de l'aide :

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
 
<script type="text/javascript" language="javascript">
 
    var myReq = new XMLHttpRequest();
 
    function callWSMethod1()
 
    {
        if (window.XMLHttpRequest)
            {
                var url = "http://127.0.0.1:8080/Alimentation_globale_0.1/services/AA_Alimentation_globale?method=runJob";
                myReq.onreadystatechange = CheckStatus1;
                myReq.open("GET", url, true); // true indicates asynchronous request
                myReq.send();
            }
    }
 
    function CheckStatus1()
    {
        if (myReq.readyState == 4) // Completed operation
        {
            myReq.open("POST","http://127.0.0.1:8080/Alimentation_globale_0.1/services/AA_Alimentation_globale/runJob", false);
            myReq.send();
            form1.TextArea1.value = oReq.responseText;
        }
    }
 
    </script>
ça marche bien, seulement j'aimerai attendre la fin d'exécution du web service pour recharger la page.
Auriez-vous une idée de comment faire?


D'ailleurs, je me dis que dans la mesure où je ne récupère pas de réponse de mon web service, est ce que le code est vraiment adapté?
Merci d'avance.
logicanalyse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 10h21   #3
Candidat au titre de Membre du Club
 
Femme Amandine
Ingénieur Info. Décisionnel
Inscription : mars 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur Info. Décisionnel

Informations forums :
Inscription : mars 2011
Messages : 29
Points : 11
Points : 11
Bon, ben finalement, c'était pas si compliqué que ça, j'y suis presque.
Code actuel :
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
 
	<script type="text/javascript" language="javascript">
    function callWSMethod()
	{
		var xhr; 
		try {  xhr = new ActiveXObject('Msxml2.XMLHTTP'); } // Essayer FF
		catch (e) 
		{
			try {   xhr = new ActiveXObject('Microsoft.XMLHTTP'); } // Essayer IE
			catch (e2) 
			{
			  try {  xhr = new XMLHttpRequest(); }  // Echec, utiliser l'objet standard
			  catch (e3) {  xhr = false;   }
			}
		 }
 
		xhr.onreadystatechange  = function()
		{
			 if(xhr.readyState  == 4)
			 {
			  location.reload();		 
			  alert("marche2");
			 }
		} 
 
	   xhr.open( "GET", "http://127.0.0.1:8080/Alimentation_globale_0.1/services/AA_Alimentation_globale?method=runJob",  true); 
	   xhr.send(); 
    }
    </script>
Ce qui me manque, c'est d'afficher une barre de progression ou de griser la page, le temps de l'exécution. Des pistes?
logicanalyse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 11h22   #4
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 074
Points : 4 074
Citation:
Envoyé par logicanalyse Voir le message
Ce qui me manque, c'est d'afficher une barre de progression ou de griser la page, le temps de l'exécution. Des pistes?
Dans le principe, tu fais tes changements de mise en attente avant l'appel AJAX (par exemple ici, au tout début de ta fonction callWSMethod), et tu rétablis la situation (si besoin, mais pas dans le cas où la page est de toutes façons rechargée) dans la fonction de callback (c.a.d. quand le readyState de onreadystatechange est à 4).

Il y a plusieurs manières de signifier l'attente à l'utilisateur, en fonction de l'ergonomie que tu souhaites pour ton site (message, gif animé d'une roue ou autre objet mobile, page grisée avec un div par-dessus en opacité 50%, etc.)
__________________

...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 10
Vieux 11/05/2011, 14h42   #5
Candidat au titre de Membre du Club
 
Femme Amandine
Ingénieur Info. Décisionnel
Inscription : mars 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur Info. Décisionnel

Informations forums :
Inscription : mars 2011
Messages : 29
Points : 11
Points : 11
Hummm, voilà ce que ça donne :
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
    function callWSMethod()
	{
		var xhr; 
		try {  xhr = new ActiveXObject('Msxml2.XMLHTTP'); } // Essayer FF
		catch (e) 
		{
			try {   xhr = new ActiveXObject('Microsoft.XMLHTTP'); } // Essayer IE
			catch (e2) 
			{
			  try {  xhr = new XMLHttpRequest(); }  // Echec, utiliser l'objet standard
			  catch (e3) {  xhr = false;   }
			}
		 }

		xhr.onreadystatechange  = function()
		{
			if (xhr.readyState!=4) 
			{
				document.getElementById("essai").style.display="block";
			}
			 if(xhr.readyState  == 4)
			 {
				  location.reload();		 
			 }
		} 
	   xhr.open( "GET", "http://127.0.0.1:8080/Alimentation_globale_0.1/services/AA_Alimentation_globale?method=runJob",  true); 
	   xhr.send(); 
    }
    </script>
L'élément qui grise la page pour signaler l'attente, avec un petit gif en background:
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
 
Span:
<span id="essai" class="essai">
	Veuillez patientez pendant le traitement...
</span>	
 
CSS:
#essai
{
display:none; 
position:absolute; 
background-color: rgba(190, 190, 190, 0.75); 
width:100%; 
height:920px; 
left:0px; 
top:-10px; 
background-image:url('../images/attendre2.gif'); 
background-repeat:no-repeat; 
background-position:center center;
line-height:800px;
font-size:14px;
font-family:"Stencil";
color:rgb(139,35,35);
}
Voili, voilou, je pense que c'est résolu.

Merci pour ton aide ;-)
logicanalyse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 14h48   #6
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 074
Points : 4 074
Citation:
Envoyé par logicanalyse Voir le message
Voili, voilou, je pense que c'est résolu.

Merci pour ton aide ;-)
Bah tu parles c'est toi qui a tout fait ^^

Et merci à toi d'avoir posté au fur et à mesure de la résolution... c'est aussi ça l'esprit forum

Tiens au fait un détail : la ligne
Code :
document.getElementById("essai").style.display="block";
ne sera déclenchée que lors du premier changement d'état de l'objet xhr. C'est peut-être sans importance, mais par acquis de conscience j'aurais plutot opté pour faire ça juste avant le xhr.open (et il ne faut pas oublier de prévoir le cas où l'appel ajax ne fonctionne pas, car là aussi il faut désactiver le div #essai pour ne pas bloquer la navigation de l'utilisateur )
__________________

...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 11/05/2011, 14h56   #7
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
Ce genre de chose m'étonnera toujours :

Code :
1
2
3
4
if(xhr.readyState  == 4)
			 {
				  location.reload();		 
			 }
faudra que l'on m'en explique l'intérêt un jour ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 15h51   #8
Candidat au titre de Membre du Club
 
Femme Amandine
Ingénieur Info. Décisionnel
Inscription : mars 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur Info. Décisionnel

Informations forums :
Inscription : mars 2011
Messages : 29
Points : 11
Points : 11
@RomainVALERI:
Ton intervention m'a été plus utile que tu ne sembles penser ;-)
Je note tes remarques. Étant donné que l'outil est destiné à un groupe restreint de personnes, je m'offre le luxe de les obliger à utiliser un navigateur défini en y activant tout ce qu'il faut.
Mais, effectivement, autant prévoir les cas particuliers.

@SpaceFrog:
Le webservice que j'appelle met à jour des données dans une base, il me faut donc rafraîchir la page pour qu'elle affiche les informations réactualisées.
C'est la 1ere fois que je me sers d'Ajax, donc si je n'ai pas respecté les normes de code, c'est par pure ignorance.
Mais, on est là pour apprendre, alors je suis toute ouïe si tu as une proposition.
logicanalyse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 16h23   #9
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 074
Points : 4 074
Citation:
Envoyé par logicanalyse Voir le message
C'est la 1ere fois que je me sers d'Ajax, donc si je n'ai pas respecté les normes de code, c'est par pure ignorance.
Là, ce n'est pas une histoire de respect des normes. Le principe et la raison première d'AJAX étant d'interagir avec le serveur SANS être obligé de recharger la page... dans le cas présent il te suffirait de faire une requête de page *classique*, non ? ^^
__________________

...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 11/05/2011, 16h47   #10
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
le but justement d'ajax est de permettre une conversation avec le serveur sans rafraichir la page
et par conséquent de recupérer des elements dans la reponse ajax qui te permettront de rafraichir la page ...

rafraichir la page lors de la reponse est selon moi un non sens absolu, une négation d'ajax ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h08   #11
Candidat au titre de Membre du Club
 
Femme Amandine
Ingénieur Info. Décisionnel
Inscription : mars 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur Info. Décisionnel

Informations forums :
Inscription : mars 2011
Messages : 29
Points : 11
Points : 11
Par défaut oO

Mmhh, je me doutais un peu que ce raccourci n'était pas la meilleure façon de faire.
A long terme, j'appellerai mon web service en java et je n'utiliserai Ajax que pour rafraîchir des éléments comme des select sans toucher au reste de la page.
Mais j'avoue que ça me dépanne bien pour le moment.

Et promis avant de rendre l'outil, je rendrai à Ajax son vrai rôle.

Thx ;-)
logicanalyse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h10   #12
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog 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 07h41.


 
 
 
 
Partenaires

Hébergement Web