IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Appel webservice depuis JS IE & FF


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur Info. Décisionnel
    Inscrit en
    Mars 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 29
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre averti
    Femme Profil pro
    Ingénieur Info. Décisionnel
    Inscrit en
    Mars 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 29
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre averti
    Femme Profil pro
    Ingénieur Info. Décisionnel
    Inscrit en
    Mars 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 29
    Par défaut
    Bon, ben finalement, c'était pas si compliqué que ça, j'y suis presque.
    Code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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?

  4. #4
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    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.)

  5. #5
    Membre averti
    Femme Profil pro
    Ingénieur Info. Décisionnel
    Inscrit en
    Mars 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 29
    Par défaut
    Hummm, voilà ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ;-)

  6. #6
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel webservices depuis Forms10G
    Par ws8790 dans le forum Forms
    Réponses: 0
    Dernier message: 21/01/2011, 14h51
  2. appel de webservice depuis le client GWT
    Par dolfendo dans le forum GWT et Vaadin
    Réponses: 8
    Dernier message: 05/11/2009, 18h59
  3. Appel d'un webservice depuis le code behind
    Par mappy dans le forum Services Web
    Réponses: 4
    Dernier message: 01/07/2008, 14h54
  4. Problème appel Ejb depuis un webservice
    Par D.Mounir dans le forum Services Web
    Réponses: 1
    Dernier message: 18/02/2008, 08h55
  5. Appeler un WebService depuis une procédure stockée
    Par kheironn dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/11/2007, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo