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 :

Requête AJAX avec paramètre avec DOJO


Sujet :

Bibliothèques & Frameworks

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 38
    Points
    38
    Par défaut Requête AJAX avec paramètre avec DOJO
    Bonjour à tous, j'ai déjà beaucoup travaillé avec Prototype mais je dois avouer que DOJO est vraiment différent. J'ai bien compris la méthode pour faire une requête en mode GET mais je ne vois pas comment faire pour passer un paramètre. J'ai tenté avec ce code:

    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
    function getQuestion(num) {
    	this.num = num;
      dojo.xhrGet({
        url: "quizz.json",
        load: function(responseObject, ioArgs){
          var textBuffer = ["Questionnaire:"];
          for(var i = 0; i < responseObject.poll.question.answer.length; i++){
            textBuffer.push("Question:"+responseObject.poll.question[this.num].answer[i].value);
          }
     
     
          dojo.byId("toBeReplaced").innerHTML = textBuffer.join("<br/>");
     
          return responseObject;
        },
        error: function(response, ioArgs){
          dojo.byId("toBeReplaced").innerHTML = 
            "An error occurred, with response: " + response;
          return response;
        },
        handleAs: "json"
      });
    }
    Pour info le but est de réaliser un questionnaire à choix multiple et d'appeller cette fonction lorsque l'on clique sur un bouton pour aller chercher le numéro de la question et afficher ses réponses possibles. Avec prototype on utiliserait bind mais avec DOJO comment doit on faire?

    Merci

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,
    tu peux ajouter le paramètre content; et attention à l'utilisation de this dans une fonction de callback: ici le this que tu utilises fait référence à l'objet passé dans la fonction . Une fois modifié:
    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
    function getQuestion(num) {
    	this.num = num;
      var self=this;
      dojo.xhrGet({
        url: "quizz.json",
        content: {param1:'valeur 1',param2:'valeur 2',param3:18 },
        load: function(responseObject, ioArgs){
          var textBuffer = ["Questionnaire:"];
          for(var i = 0; i < responseObject.poll.question.answer.length; i++){
            textBuffer.push("Question:"+responseObject.poll.question[self.num].answer[i].value);
          }
          
          dojo.byId("toBeReplaced").innerHTML = textBuffer.join("<br/>");
          
          return responseObject;
        },
        error: function(response, ioArgs){
          dojo.byId("toBeReplaced").innerHTML = 
            "An error occurred, with response: " + response;
          return response;
        },
        handleAs: "json"
      });
    }
    ERE

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 38
    Points
    38
    Par défaut
    Merci de t'intéresser à mon problème, mais tu pourrais m'expliquer un peu mieux le paramètre "content" s'il te plait?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 38
    Points
    38
    Par défaut
    En tout cas ça marche avec self. Merci encore

  5. #5
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Citation Envoyé par Tavarez59 Voir le message
    Merci de t'intéresser à mon problème, mais tu pourrais m'expliquer un peu mieux le paramètre "content" s'il te plait?
    le content est l'équivalent de ton bind. Donc Dojo ajoute à l'url les paramètres avec leur valeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      dojo.xhrGet({
        url: "quizz.json",
        content: {param1:'valeur1',param2:'valeur2',param3:18 },
    donnera cette url:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quizz.json?param1=valeur1&param1=valeur2&param3=18
    Et il est aussi possible de lui passer comme paramètre un formulaire et dans ce cas il ajoute tous les champs sous forme de paramètres

    Bon dev,


    ERE

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 38
    Points
    38
    Par défaut
    Merci

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 38
    Points
    38
    Par défaut
    Au point où j'en suis j'ai 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
    function getText(num) {
      this.num = num;	
      var self= this;
      dojo.xhrGet({
        url: "quizz.json",
        handleAs: "json",
        load: function(responseObject, ioArgs){
        	self.data = responseObject; 
     
          return responseObject;
        },
        error: function(response, ioArgs){
          dojo.byId("toBeReplaced").innerHTML = 
            "An error occurred, with response: " + response;
          return response;
        }
      });
     
    alert(self.data);
    }
    Or, quand j'execute le code le alert du self.data m'affiche "undefined" d'où vient le problème?

    Merci!

  8. #8
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Le problème vient du fait que AJAX est asynchrone par défaut et donc que ton dojo.xhrGet n'a pas fini de s'exécuter quand tu demandes l'affichage du résultat


    Si tu veux vérifier, il faut demander l'affichage du résultat dans la fonction de callback:

    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 getText(num) {
      this.num = num;	
      var self= this;
      dojo.xhrGet({
        url: "quizz.json",
        handleAs: "json",
        load: function(responseObject, ioArgs){
        	self.data = responseObject; 
           alert(self.data);
          return responseObject;
        },
        error: function(response, ioArgs){
          dojo.byId("toBeReplaced").innerHTML = 
            "An error occurred, with response: " + response;
          return response;
        }
      });
     
    
    }
    ERE

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 38
    Points
    38
    Par défaut
    Merci, ça m'éclaircit un peu mais le problème c'est que moi cette variable je dois l'utiliser hors de la fonction. En fait je veux récupérer l'objet JSON pour l'utiliser plus tard et ne le charger qu'une seule fois. Dans ce cas, je devrai essayer avec "complete" ça fonctionnera peut-être!

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 38
    Points
    38
    Par défaut
    Bon grâce à tes conseils j'en arrive au code suivant, je le met ça servira surement à d'autres noob comme moi :

    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
    function getText(num) {
      this.num = num;	
      var self= this;
      dojo.xhrGet({
        url: "quizz.json",
        handleAs: "json",
        sync: true,
        load: function(responseObject, ioArgs){
        	self.data = responseObject; 
            /*var question = dojo.doc.createTextNode(responseObject.poll.question[self.num].value);
            dojo.body().appendChild(question);
            dojo.body().appendChild(document.createElement('br'));
            for(var i=0; i<responseObject.poll.question[self.num].answer.length;i++) {
            	var answer = responseObject.poll.question[self.num].answer[i].value;
            	var type = responseObject.poll.question[self.num].type;
            	var nbAnswers = responseObject.poll.question[self.num].answer.length;	
            	applyQuestionType(i, answer, type, nbAnswers);
            	dojo.body().appendChild(document.createElement('br'));
            }
            dojo.body().appendChild(document.createElement('br'));
          */  
     
          return responseObject;
        },
        error: function(response, ioArgs){
          dojo.byId("toBeReplaced").innerHTML = 
            "An error occurred, with response: " + response;
          return response;
        }
      });
     
    alert(self.data.donneedujson);
     
    }
    Merci

  11. #11
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Citation Envoyé par Tavarez59 Voir le message
    Merci, ça m'éclaircit un peu mais le problème c'est que moi cette variable je dois l'utiliser hors de la fonction. En fait je veux récupérer l'objet JSON pour l'utiliser plus tard et ne le charger qu'une seule fois. Dans ce cas, je devrai essayer avec "complete" ça fonctionnera peut-être!
    Tu peux bien sûr utiliser ta variable data en dehors de la fonction, la seule chose c'est qu'il faut s'assurer que la requête AJAX est bien terminée ou encore que ta variable a bien été affectée. Utiliser complete ou autre chose ne t'apportera rien, cela ne fera que repousser le problème un peu plus loin. C'est un souci de d'architecture lié à AJAX (cas asynchrone) et non à Dojo.

    Bon dev,

    ERE

Discussions similaires

  1. Alimenter une requête POST ou GET avec paramètre
    Par yomismo dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 04/11/2013, 21h47
  2. Appel procédure PL/SQL avec Hibernate avec paramètre retour OUT
    Par rom292 dans le forum Persistance des données
    Réponses: 2
    Dernier message: 02/06/2012, 20h15
  3. [Batch] démarrer une commande avec paramètre avec un start
    Par zangdar666 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/11/2011, 21h30
  4. Réponses: 5
    Dernier message: 27/05/2009, 11h53
  5. Réponses: 10
    Dernier message: 17/04/2008, 14h29

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