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 :

Mise en attente


Sujet :

JavaScript

  1. #1
    Membre chevronné Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Par défaut Mise en attente
    Bonjour,

    Je souhaiterais arreter une procédure sans arreter l'execution global du javascript.

    j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    is_acces(hash);
    while (loading==0) {
    }
    			
    load_color();
    while (loading==1) {
    }
    [...]
    Sachant que la variable loading et modifié dans les fonctions que j'appelle, c'est derniére sont des procédure Ajax...
    Mais le while "accapare" l'execution du reste et me donne donc une boucle infini.

  2. #2
    Membre éclairé Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Par défaut
    je comprend pas bien ton probleme mais moi quand je doit mettre en attente avec des procedures AJAX je fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( xhr.readyState == 1 ){
    	// chargement en cours
    	result += "<div>"
    	result += " chargement en cours "
    	result += "<img align=\"center\" src=\"image/load.gif\" />"
    	result += "</div>"
    	document.getElementById("div_dest").innerHTML = result;
    }
    if ( xhr.readyState == 4 ){
    	//affichage des données...
    }
    j'utilise la propriété readyState et j'affiche une image de loading
    j'espere que ça t'aideras

  3. #3
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par jmulans
    je comprend pas bien ton probleme mais moi quand je doit mettre en attente avec des procedures AJAX je fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( xhr.readyState == 4 ){
    	//affichage des données...
    }
    j'utilise la propriété readyState et j'affiche une image de loading
    j'espere que ça t'aideras
    +1 pour readyState. C'est le seul moyen de faire de l'asynchrone pour attendre le retour de ta méthode Ajax.
    Quand le retour est là (readyState à 4), tu déclenches la fin de ta méthode.

    On ne peut pas suspendre une méthode : il faut la couper en deux, et executer une partie avant, et l'autre après.

  4. #4
    Membre chevronné Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Par défaut
    Oui mais non... c'est ce que je fais aussi, mais l'inconvénient c'est que j'ai plusieurs methode Ajax en chargement, donc si je les execute à la suite elle s'annule, et ça revient à n'executer que la derniére... et j'ai des méthode en masse, et j'aimerais eviter de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    load_color();
    function load_color () {
      if (getObjAjax()) {
    		[...]
    		objAjax.onreadystatechange = function(){
    			if (objAjax.readyState == 4 && objAjax.status == 200) {
                                    [...]
                                     load_modele();
                             }
                     }
    }
    ça chaque fois... ça fait laid...

  5. #5
    Membre chevronné Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Par défaut
    Bon je vais faire de cette maniére, mais ça ne m'enchante guére... parceque cela fait des appel de méthode n'importe où et c'est laid.

  6. #6
    Membre chevronné Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Par défaut
    Finalement, j'ai décidé de mettre en place un setInterval qui appel toujours la même méthode, et 2 variables indiquant a quel étape je suis, et si l'étape en cours en terminé.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    var intFunc; var etapload=0; var onload=false;
    
    [...]
    
    intFunc = setInterval("setLoading()", 50);
    
    [...]
    
    function setLoading() {
    			//Vérification et chargement des éléments
    			if (!onload) {
    				onload = true;
                                    etapload++;
    				switch(etapload) {
    					case 1:
    						is_acces(hash);
    						break;
    					case 2:
    						load_color();
    						break;
    					case 3:
    						load_picto();
    						break;
    					case 4:
    						load_logo();
    						setAction("picto");
    						do_popup("close");
    						break;
    					case 5:
    						load_modele();
    						setAction("logo");
    						do_popup("close");
    						break;
    					case 6:
    						load_font();	
    						break;
    					case 7:
    						clearInterval(intFunc);
    						setAction("");
    						break;	
    				}
    			}
    		}
    Les fonctions load_* sont des méthodes ajax, donc dés que je récupere mon resultat xml, je passe :

    L'idée peut toujours servir à quelqu'un d'autre même si j'en doute...

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

Discussions similaires

  1. Delphi 7 --> TPrinter : mise en attente
    Par GLBX2008 dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 20/06/2009, 19h21
  2. Mise en attente d'une fenetre
    Par top_eagle dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 02/09/2008, 15h51
  3. Mise en attente de mon application
    Par xx_FiFty_xx dans le forum C#
    Réponses: 11
    Dernier message: 30/06/2008, 15h21
  4. [JTable] Action sur JButton après mise en attente
    Par 6ix dans le forum Composants
    Réponses: 2
    Dernier message: 28/02/2008, 07h27
  5. mise en attente d'évènements
    Par BigNic dans le forum C#
    Réponses: 1
    Dernier message: 07/12/2007, 15h22

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