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

Bibliothèques & Frameworks Discussion :

Délai d'exécution d'une fonction [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : juillet 2002
    Messages : 87
    Points : 92
    Points
    92
    Par défaut Délai d'exécution d'une fonction
    Bonjour,

    j'ai une fonction qui me récupère les valeurs d'un checkbox, envoie ces valeurs à une page PHP pour un traitement, et affiche le résultat dans un div

    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
    function check(formulaire){
     
    	new Ajax.Request("wait.php", {
    		method: 'post',
    		onComplete: showResponseMain
    	});
     
    	var nb = formulaire.elements['state[]'].length;
    	var valeur = "";
    	for (i = 0; i < nb; i ++){
    		if (formulaire.elements['state[]'][i].checked){
    			valeur += formulaire.elements['state[]'][i].value + ',';
    		}
    	}
    	alert(valeur);
     
    	new Ajax.Request("compare_photo.php", { 
    		method: 'post', 
    		postBody: $H({//genre:$F('genre'),
    					  state:valeur
    					  }).toQueryString(),
    		onComplete: showResponseMain 
    	});
    }

    Pas de souci majeur, ca fonctionne (presque) nickel.
    Si je commente le alert ligne 15, ca ne passe plus.
    Avez-vous une idée? Est ce que le fait d'avoir un alert fait que le script effectue une pause? La requête Ajax est-elle trop rapide?

    Je n'ai aucune erreur dans /var/log/error.log et sur firebug, pas le temps de voir l'erreur, c'est trop rapide dans la console :p

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    16 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 16 093
    Points : 40 889
    Points
    40 889
    Par défaut
    Bonjour,
    - qui y a t-il dans la fonction showResponseMain ?
    - pourquoi ne pas mettre la deuxième requête dans le onComplete de la première?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : juillet 2002
    Messages : 87
    Points : 92
    Points
    92
    Par défaut
    Salut,

    le contenu de ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function showResponseMain(req){
    		$('main').innerHTML= req.responseText;
    	}
    En fait, la page html se charge avec des div que j'ai appelé sidebar, sur le coté gauche, et un div main, vide par défaut.
    En fonction des choix effectués sur sidebar, des scripts php sont appelés et génèrent un contenu à afficher dans le div main. Et pendant le temps de traitement de ces scripts, j'affiche la page wait.php

    contenu de wait.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="images/mini-throbber.gif">
    Je débute un peu en Ajax j'avoue, je ne sais pas si c'est très propre du coup de coder comme ca..

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    16 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 16 093
    Points : 40 889
    Points
    40 889
    Par défaut
    je connais que très peu prototype, hé oui personne n'est parfait
    Et pendant le temps de traitement de ces scripts, j'affiche la page wait.php
    il faut savoir qu'en local, le délai de réponse est quasiment instantané d'où l'affichage intermédiaire peut ne pas se faire.

    Concernant le déroulement des opérations je te soumet, sous réserve, le code suivant
    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 check(formulaire, rappel){
      if (!rappel){
        new Ajax.Request("wait.php",{
          method: 'post',
          onComplete: function (data){
            $('main').innerHTML = data.responseText;
            check(formulaire, true);  // rappel de la fonction
          }
        });
      }
      else{
        var nb = formulaire.elements['state[]'].length;
        var valeur = "";
        for (i = 0; i < nb; i++){
          if (formulaire.elements['state[]'][i].checked){
            valeur += formulaire.elements['state[]'][i].value + ',';
          }
        }
    //    alert(valeur);
        new Ajax.Request("compare_photo.php",{
          method: 'post',
          postBody: $H({ //genre:$F('genre'),
            state: valeur
          }).toQueryString(),
          onComplete: function (data){
            $('main').innerHTML = data.responseText;
          }
        });
      }
    }
    l'idée est d'attendre que le résultat de la première requête soit disponible pour lancer la 2éme.
    Le paramètre rappel permet de ne traiter qu'une partie de la fonction.

    D'un autre coté, il n'est peut être pas utile de faire une requête pour l'affichage de l'attente dans ce style
    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
    function check(formulaire){
      $('main').innerHTML = '<img src="images/mini-throbber.gif">';
      var nb = formulaire.elements['state[]'].length;
      var valeur = "";
      for (i = 0; i < nb; i++){
        if (formulaire.elements['state[]'][i].checked){
          valeur += formulaire.elements['state[]'][i].value + ',';
        }
      }
    //  alert(valeur);
      new Ajax.Request("compare_photo.php",{
        method: 'post',
        postBody: $H({ //genre:$F('genre'),
          state: valeur
        }).toQueryString(),
        onComplete: function (data){
          $('main').innerHTML = data.responseText;
        }
      });
    }
    mais tout ceci est sous réserve, avec encore ce rappel en local, le délai de réponse est quasiment instantané.

    Mais au fait est ce le problème que celui de l'affichage ?

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : juillet 2002
    Messages : 87
    Points : 92
    Points
    92
    Par défaut
    Bonjour

    Ta deuxième solution marche nickel

    je cherche à faire compliquer parfois :p

    Merci beaucoup!

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/04/2006, 16h36
  2. Stopper l'exécution d'une fonction au bout d'un certain temp
    Par Eagle959 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/03/2006, 18h16
  3. Réponses: 3
    Dernier message: 11/03/2006, 15h35
  4. Pause dans l'exécution d'une fonction
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/06/2005, 07h48
  5. Exécution d'une fonction...
    Par mickeliette dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/11/2004, 16h59

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