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 :

[POO] Ajax.Request dans méthode de classe: récupérer réponse


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Points : 24
    Points
    24
    Par défaut [POO] Ajax.Request dans méthode de classe: récupérer réponse
    Salut à tous.
    J'essaie de faire un peu de poo en js mais je galère. Je pense qu'un exemple de code sera assez parlant: ma question est en commentaire.
    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
     
    // instanciation
    var c = new MaClasse();
    c.updatePage();
     
    // constructeur
    function MaClasse() {
        // variables de classe
        this.AjaxResponse = null;
        // ...
     
        // méthodes
        this.updatePage = function() {
            // code...
            this.getAjaxResponse();
            // code...
        }
     
        this.getAjaxResponse = function() {
            new Ajax.Request('url', {options},
                onSuccess : function(transport) {
                    jsonResponse = transport.responseText || null;
    // ICI je ne sais pas comment faire pour affecter jsonResponse
    // dans ma variable de classe this.AjaxResponse
    // ou appeler une autre méthode de MaClasse avec jsonResponse en param
     
                    }
            );
        }
    }
    Merci de votre aide.

  2. #2
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    this.AjaxResponse=jsonResponse;
    ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    Salut matthieu et merci pour ta réponse
    C'est exactement ce que j'ai fait au départ mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.getAjaxResponse();
    alert("Ajaxresponse : " + this.AjaxResponse); // renvoie null
    J'ai donc pensé que le this dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.AjaxResponse = jsonResponse;
    ne faisait pas référence à MaClasse mais à l'objet Ajax.Request.
    Maintenant en lisant ta réponse je me demande si mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert("Ajaxresponse : " + this.AjaxResponse);
    n'arrive pas trop tôt : ie que la variable this.Ajaxresponse n'a pas encore été modifiée au moment de l'alert("")

  4. #4
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    la request est elle synchrone ou asynthrone?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    Re, désolé pour le retard.

    J'utilise la librairie prototype et les AJax.Request sont par défaut asynchrones

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    ok , j'ai compris grace à ta question. J'ai testé avec ces modifications:
    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
    // instanciation
    var c = new MaClasse();
    c.updatePage();
     
    // constructeur
    function MaClasse() {
        // variables de classe
        this.AjaxResponse = null;
        // ...
     
        // méthodes
        this.updatePage = function() {
            // code...
            this.getAjaxResponse();
            // code...
        }
     
        this.getAjaxResponse = function() {
            new Ajax.Request('url', {options},
                onSuccess : function(transport) {
                    jsonResponse = transport.responseText || null;
    // MODIF 1
                    testResponse();
    //
     
    // ICI je ne sais pas comment faire pour affecter jsonResponse
    // dans ma variable de classe this.AjaxResponse
    // ou appeler une autre méthode de MaClasse avec jsonResponse en param
     
                    }
            );
        }
     
    // MODIF 2 : ajout methode testResponse() appelée apres succes requete
        this.testResponse()
        {
            alert(this.AjaxResponse);  // ici j'ai bien mon json
        }
    }
    Donc c'était pas un problème de this mais de délai. Ça veut dire que je devrais faire mon eval json et mes updates d'éléments dans une fonction appelée depuis le onSuccess ou passer en mode synchrone pour poursuivre l'exécution de mon script après la réception de la réponse.

    Merci pour ton aide.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/05/2014, 09h49
  2. Réponses: 0
    Dernier message: 27/09/2011, 17h37
  3. Réponses: 1
    Dernier message: 08/11/2010, 11h24
  4. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  5. [POO] utiliser une méthode présente dans une autre classe
    Par arnaudperfect dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2007, 14h23

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