Partage
  • Partager sur Facebook
  • Partager sur Twitter

Avec Prototype, problème de Ajax.Request

passer une valeur obtenue de onSuccess à une portée plu haut

    29 novembre 2011 à 22:13:28

    BonJour,

    J'ai une class editor qui se charge de parser un texte en creole (langage wiki). Le parsing se fait côté serveur grâce à un script php. Ma classe javascript appelle une méthode "parse" qui instancie un Ajax.Request qui va se charger de récupérer le texte parsé, à travers un bête reponse.responseText.

    parse:function(unparsed){
           
    
           var parsed = "";
           var php_file_url = "classes/xTypes/js/ajax_parser.php";
           var properties = new Hash();
           properties.set("text", unparsed);
           
           var callbackb = function(transport){
                    parsed = transport.responseText;
                    console.log("Dans le callback: "+parsed);
           }
           
           new Ajax.Request(php_file_url, {
               method: 'post',
               onSuccess:callbackb.bindAsEventListener(this),
               parameters:properties
           });
           
           console.log("Hors du callback: "+parsed);
    
    
            
        }
    


    Si je passe la chaine "Hello" à mon parsing, j'obtiens dans ma console:
    Dans le callback: Hello
    Hors du callback:


    Bizarre bizarre...

    J'ai aussi essayé de faire de ma variable "parsed" un membre global de ma classe editor:

    ,parse:function(unparsed){
           
    
           this.parsed = "";
           var php_file_url = "classes/xTypes/js/ajax_parser.php";
           var properties = new Hash();
           properties.set("text", unparsed);
           
           var callbackb = function(transport){
                    this.parsed = transport.responseText;
                    console.log("Dans le callback: "+this.parsed);
           }
           
           new Ajax.Request(php_file_url, {
               method: 'post',
               onSuccess:callbackb.bindAsEventListener(this),
               parameters:properties
           });
           
           console.log("Hors du callback: "+this.parsed);
    
    
            
        }
    


    Et j'ai le même résultat.... Il me semble pourtant ne pas faire de faute, notamment, je crois que ma façon d'utiliser le bindAsEventListener est correcte, et j'obtiens bien "class Editor" si je fais un console.log(this) dans le callback...

    Hum hum... en tous les cas, je n'arrive pas à trouver un moyen de faire passer la valeur parsée de mon texte de l'intérieur de mon callback, à un niveau de portée plus haut, c'est à dire dans ma methode "parse".

    C'est ennuyeux, car je voudrais pouvoir retourner cette valeur de ma methode "parse".

    MErci de m'aider si vous avez une idée

    A++
    • Partager sur Facebook
    • Partager sur Twitter
      29 novembre 2011 à 23:30:39

      L'Ajax est asynchrone et donc non bloquant.

      La conséquence, c'est que la ligne 20 est exécutée avant la ligne 11.

      Tu ne pourras pas return cette valeur avec un Ajax asynchrone. Soit tu fais fi de l'asynchronisme... mais c'est nul. Soit tu agis sur la valeur obtenue uniquement dans ton callback.
      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2011 à 23:36:56

        c'est d'un logique... je me sens tout rouillé!

        Merci beaucoup, ça clarifie nettement, et du coup je crois avoir trouvé une solution!
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2011 à 0:14:13

          Pense à mettre ton sujet en résolu à l'aide du bouton approprié ;)
          • Partager sur Facebook
          • Partager sur Twitter

          Avec Prototype, problème de Ajax.Request

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown