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

  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 : 49
    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 : 49
    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 )

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Ce genre de chose m'étonnera toujours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 - Mon Blog 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

    Venez sur le Chat de Développez !

  8. #8
    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
    @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.

  9. #9
    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 : 49
    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
    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 ? ^^

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    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 - Mon Blog 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

    Venez sur le Chat de Développez !

  11. #11
    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 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 ;-)

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de Développez !

+ 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