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 :

Plusieurs fonctions ajax dans une file d'attente


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 79
    Par défaut Plusieurs fonctions ajax dans une file d'attente
    bonjour, j'aimerais appeler les fonctions f1(parametre),f2(parametre),...
    avec prototype.js quelqu'un a t-il une idée ? (chaq fonction fait une requete ajax en utilisant prototype.js)

    J'ai essayé: window.onload = function () {...} mais cela ne marche pas toujours, cela depend du temps d'execution de chaq fonction. A mon avis il faut attendre l'execution de chaq fonction. Mais je ne sais pas comment faire ? http://dcabasson.developpez.com/arti...ototype-1.4.0/ ne soulève pas le problème !

  2. #2
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Salut,

    Ta question concerne l'execution de plusieurs fonctions au load de la page ou l'enchainement de fonctions AJAX ? Ou les 2 ?

    Détecter le load (par exemple, on peut faire de différentes facons)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Event.observe(window, "load", function() {
      f1(params);
      f2(params);
    });
    Pour enchainer les appels AJAX, (si tu dois attendre le resultat d'une requete AJAX avant d'envoyer la deuxieme), il faut passer par les callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function f1(params) {
      new Ajax.request("url", {
        parameters: params, 
        onSuccess: function(response) {
          f2();
        }
      });
    }
     
    function f2() {
    // ...
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 79
    Par défaut
    (enchainement)
    Il n'a t-il pas un proceder par prototype pour le faire automatiquement (du genre il met dans une pile d'appel ?).

    Autre exemple, lorsqu'un utilisateur clique et n'attend pas la reponse, une 2° fonction peut etre appelée donc je ne pourrais pas savoir qui s'appelle qui !

  4. #4
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Citation Envoyé par majong Voir le message
    Il n'a t-il pas un proceder par prototype pour le faire automatiquement (du genre il met dans une pile d'appel ?).
    Non, à moins de te créer ta propre classe :
    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
     
    var AjaxStack = Class.create(  {
      initialize : function() {
       this.ajaxCalls = [];
      },
      push : function(url, params) {
       this.ajaxCalls.push({url: url, params: params}) ;
      },
      run : function() {
       var ajaxOpts = this.ajaxCalls.shift();
       if(ajaxOpts) {
         new Ajax.Request(ajaxOpts.url, {
          parameters: ajaxOpts.params,
          onSuccess: this.run.bind(this),
          onFailure:function() {alert("Erreur: " + ajaxOpts.url);}
         });
       }
     }
    }  );
     
    // ...
     
    var ajaxStack = new AjaxStack();
    ajaxStack.push("/une/url", {foo:"bar"});
    ajaxStack.push("/une/autre/url", {jambon:"fromage"});
    ajaxStack.run();
    Citation Envoyé par majong Voir le message
    Autre exemple, lorsqu'un utilisateur click et n'attend pas la reponse, une 2° fonction peut etre appelée donc je ne pourrais pas savoir qui s'appelle qui !
    Je ne comprends pas le "qui s'appelle qui "

    EDIT : exemple non testé

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 79
    Par défaut
    interressant, comment alors appeler mafonction (qui dépend de mes parametres) dans onsuccess ? (en faite, f1 appelle success_f1(reponse) en cas de succes, f2 appelle success_f2(reponse) en cas de succes)

    (this.run.bind(this) ???)


    Autrement dit que devient les traitements d'appel de f1 en cas de succes ?

  6. #6
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Citation Envoyé par majong Voir le message
    interressant, comment alors appeler mafonction (qui dépend de mes parametres) dans onsuccess ? (en faite, f1 appelle success_f1(reponse) en cas de succes, f2 appelle success_f2(reponse) en cas de succes)
    Presque rien à changer : la response est envoyé à run aux appels suivants...
    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
    var AjaxStack = Class.create(  {
      // ...
      run : function(response) {
       var ajaxOpts = this.ajaxCalls.shift();
       if(ajaxOpts) {
         if(response) {
           // faire quelque chose avec response
         }
         new Ajax.Request(ajaxOpts.url, {
          parameters: ajaxOpts.params,
          onSuccess: this.run.bind(this),
          onFailure:function() {alert("Erreur: " + ajaxOpts.url);}
         });
       }
     }
    }  );
     
    // ...
    Citation Envoyé par majong Voir le message
    (this.run.bind(this) ???)
    C'est pcq le callback est une fonction anonyme, en faisant un bind, on spécifie qui sera son contexte; dans notre cas on veut this comme this

Discussions similaires

  1. Réponses: 51
    Dernier message: 20/08/2013, 16h44
  2. Comment faire pour utiliser plusieurs fonctions logiques dans une condition ?
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/11/2010, 11h37
  3. Insertion dans une file d'attente MQSERIS
    Par a_karim_fr dans le forum z/OS
    Réponses: 3
    Dernier message: 13/10/2009, 18h14
  4. [AJAX] Appel d'une fonction javascript dans une page chargée en ajax
    Par baedal dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 17/04/2008, 17h03
  5. [AJAX] Acces aux données avec ajax dans une fonction javascript
    Par Sidi-Bou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/03/2008, 12h04

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