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 :

Afficher une message d'attente lors d'un appel ajax


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut Afficher une message d'attente lors d'un appel ajax
    Bonsoir,

    voilà, quand je fais un appel ajax, je voudrais le faire en synchrone et afficher un message d'attente pendant le traitement.

    j'ai une DIV avec le message "sauvegarde en cours" qui existe sur la page.

    lors du démarrage de la sauvegarde (clic sur un bouton qui appel la fonction ajax), je rend la DIV visible, et à la fin du traitement, je la rend hidden.

    Mais, en fait, dans la réalité, quand je clic sur mon bouton, il s'enfonce, rien n'apparait à l'écran, et puis il me rend la main.

    dois-je faire un "refresh" ou quelque chose pour que la div s'affiche ?


    merci

  2. #2
    Membre éclairé Avatar de arkandias
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 102
    Par défaut
    En rendant le DIV visible avant d'effectuer la fonction Ajax, et en le rendant invisible après la fin, ca ne marche pas ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 24
    Par défaut
    J'ai le même problème.

    En début de fonction j,affecte mes DIV avec le style visible et après j'effectue ma fonction httpRequest.

    Mais mon DIV d'attente ne s'affiche pas.

  4. #4
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    Ne le fait pas lors du démarrage, mais juste avant ...
    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 !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Ben je le fais avant les appels ajax, mais j'ai l'impression qu'il n'a pas le temps de l'afficher.

    il faut peut-être un genre de sleep ou un refresh avant ?

    voici ma fonction:
    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
    function save_plan(param){
     
    	document.getElementById('div_sauvegarde').style.visibility='visible';
     
    	var xhr = getXMLHTTP();
    	xhr.onreadystatechange = function(){
    		alert(xhr.readyState);
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert(xhr.responseText);
    		}
    	}
    	xhr.open("POST","save_local_fire.php",false);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send(param);
    	document.getElementById('div_sauvegarde').style.visibility='hidden';
    }

  6. #6
    Membre éclairé Avatar de arkandias
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 102
    Par défaut
    Essaie en mettant un setTimeout ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    j'ai essayé plusieurs options, sans trouver le bon résultat.

    j'ai essayé ceci (en séparant les deux fonctions):
    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
    function save_et_message(param){
    	document.getElementById('div_sauvegarde').style.visibility='visible';
    	save_plan(param);
    	document.getElementById('div_sauvegarde').style.visibility='hidden';
    }
     
    function save_plan(param){
     
    	var xhr = getXMLHTTP();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		alert(xhr.readyState);
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert(xhr.responseText);
    		}
    	}
    	// le dernier param est FALSE pour un dialogue synchrone = attend la réponse du serveur
    	xhr.open("POST","save_local_fire.php",false);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send(param);
    }
    et puis une variante avec un setTimeout:
    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
    function save_et_message(param){
    	document.getElementById('div_sauvegarde').style.visibility='visible';
    	setTimeout("save_plan(\""+param+"\")",1);
    	document.getElementById('div_sauvegarde').style.visibility='hidden';
    }
     
    function save_plan(param){
     
    	var xhr = getXMLHTTP();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		alert(xhr.readyState);
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert(xhr.responseText);
    		}
    	}
    	// le dernier param est FALSE pour un dialogue synchrone = attend la réponse du serveur
    	xhr.open("POST","save_local_fire.php",false);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send(param);
    }

    d'autres idées ?

  8. #8
    Membre éclairé Avatar de arkandias
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 102
    Par défaut
    Bon admettons...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('div_sauvegarde').style.visibility='hidden';
    Ca tu le déplace quand tu as le résultat de ta requete Ajax

    Et ensuite essaie avec des temps de setTimeout plus long genre 200ms... ca te donne quoi exactement ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Bonsoir,

    voilà, après des recherches sur le net, j'ai la solution:

    il faut mettre le visible et l'appel de la fonction dans une fonction, et à la fin de l'autre fonction le hidden.

    il faut que le browser sorte de la fonction avant d'appeler la sauvegarde ajax

    voilà

    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
    function save_et_message(param){
    	document.getElementById('div_sauvegarde').style.visibility='visible';
    	window.setTimeout("save_plan(\""+param+"\")",1);
    }
     
    function save_plan(param){
     
    	var xhr = getXMLHTTP();
    	xhr.onreadystatechange = function(){
     
    		alert(xhr.readyState);
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert(xhr.responseText);
    		}
    	}
    	xhr.open("POST","save_local_fire.php",false);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send(param);
     
    	document.getElementById('div_sauvegarde').style.visibility='hidden';
    }

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Arkandias, tu as entièrement raison !

    j'ai trouvé la soluce pendant que tu la publiais ;-)

    Merci !

  11. #11
    Membre éclairé Avatar de arkandias
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 102
    Par défaut
    Oui

    Eh ben de rien, bonne soirée !

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

Discussions similaires

  1. Afficher un message d'attente lors d'un upload d'images
    Par benny-blanco dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/09/2012, 17h17
  2. Réponses: 4
    Dernier message: 29/01/2009, 09h21
  3. message d'attente lors du chargement d'une page web
    Par info007 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 18/08/2008, 18h24
  4. Afficher un message d'attente lors d'un submit
    Par lodan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/04/2008, 15h01
  5. afficher un message d'erreur lors d'une saisie
    Par ludovicparis dans le forum IHM
    Réponses: 4
    Dernier message: 20/03/2007, 11h37

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