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 :

Traiter une reponse xml [Dojo]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut Traiter une reponse xml
    Bonjour,

    Je commence à faire mes premiers pas en ajax et la je rencontre pas mal de soucis (Plutot des trucs que je ne
    comprend pas).

    J'ai un tableau dans ma page qui contient des données qui doivent être rafraichis de manière transparente par rapport au client

    Puisque mon tableau contient plusieus données qui doivent être rafraichit, je dois traiter la reponse sous forme XML.



    Dans mon action Struts (eq servlet java) je crer et je rempli ma reponse xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* Création et remplissage de la reponse xml */
                StringBuffer returnXML = null;
                    returnXML = new StringBuffer("\r\n<response>");
                    returnXML.append("\r\n<spot>"+spot+"</spot>");                
                    returnXML.append("\r\n</response>");
     
                    //initialisation de la reponse
                    response.setContentType("text/xml");
                    response.setHeader("Cache-Control","no-cache");
                    //envoie la chaine XML (reponse serveur au client ajax)
                    response.getWriter().write(returnXML.toString());                
                    //afficher le contenu de returnXML :
    quand j'affiche sur la sortie standard ma reponse j'ai bien ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <response>
    <spot>4988.0</spot>
    </response>
    Maintenant, je veux traiter la reponse dans mon js mais je ne vois pas du tout comment faire. Deja, comment passer à mon fichier js la reponse ?
    et ensuite comment la traiter.


    Voici mon fichier :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    var myLocale;
    // Ce tableau va servir pour stocker les spots afin de les colorier
    var underlyingArray = new Array();
    var nom=new Array();
        var valeur=new Array();
     
        // On enlève le ?
        param = window.location.search.slice(1,window.location.search.length);
     
        // On sépare le paramètres....
        // first[0] est de la forme param=valeur
     
        first = param.split("&");
     
        for(i=0;i<first.length;i++){
            second = first[i].split("=");
            nom[i] = second[0];
            valeur[i] = second[1];
        }
     
    var underlyingID =  valeur[1];
     
    function topflop(locale) {
          if(locale && locale.length > 0)
            myLocale = locale;    
     
          var bindArgs = {
              url: "topturboday.do?underlyingID="+underlyingID+"&loc=" + myLocale,
              method: "get",
              mimetype: "text/xml",
              load: function(type, data) {    
                 refreshData(data);
                 }
             };
     
          dojo.io.bind(bindArgs);     
          runId = setTimeout("tradingfut()", 5000);
    }
     
    function refreshData(data) {
       var target = document.getElementById("tradingfut");   
     
       target.innerHTML = data; 
          var previousSpot = underlyingArray[0];      
          var newSpot = document.getElementById("tradingfut").innerHTML;         underlyingArray[0] = newSpot;
         if(previousSpot < newSpot) {
              dojo.lfx.html.highlight(document.getElementById("tradingfut"),  "#00B440", 1500).play();
          }
          else if(previousSpot > newSpot){
              dojo.lfx.html.highlight(document.getElementById("tradingfut"),  "#DE0000", 1500).play();
          }
       //dojo.lfx.html.highlight(document.getElementById("tradingfut"),  "#00B440", 1500).play();
    }
    Merci à tous

  2. #2
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 171
    Points : 63
    Points
    63
    Par défaut XMLHTTPRequest
    Regarde les tutoriels sur XMLHTTPRequest...

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    j'ai regardé et dans les tutoriaux ils mettent ça url: "content.xml",
    alors que moi j'ai besoin qu'i appaelle l'url

  4. #4
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Ta réponse qui est dans data est un arbre xml, donc tu peux la parser avec les méthodes du dom de javascript (ou des méthodes de dojo, je connais pas mais j'ai cru comprendre que ca existaait).

    Quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    load: function(type, data) {	
    	var spot = data.getElementsByTagName("spot")[0].firstChild; // =4988.0
             	}

  5. #5
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    ok merci, maintenant, je recupere bien l'arbre xml, en faisant
    alert(data) je vois bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <response>
    <spot>7062.0</spot>
    </response>
    par contre ce que je ne comprend pas, comment mon champs spot est mis à jour correctement, normalement ile le devrait pas puisque la reponse retourne tout un arbre alors que dans mon cas le spot est bien mis à jour avec la valeur 7062.0.

    pour rappel voici mon 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    var myLocale;
    // Ce tableau va servir pour stocker les spots afin de les colorier
    var underlyingArray = new Array();
    //alert("coucou trading fut");
    var nom=new Array();
        var valeur=new Array();
     
        // On enlève le ?
        param = window.location.search.slice(1,window.location.search.length);
     
        // On sépare le paramètres....
        // first[0] est de la forme param=valeur
     
        first = param.split("&");
     
        for(i=0;i<first.length;i++){
            second = first[i].split("=");
            nom[i] = second[0];
            valeur[i] = second[1];
        }
     
    var underlyingID =  valeur[1];
     
    function topflop(locale) {
          if(locale && locale.length > 0)
            myLocale = locale;	
    		//alert( "topturboday.do?underlyingID="+underlyingID);
          var bindArgs = {
          	url: "topturboday.do?underlyingID="+underlyingID+"&loc=" + myLocale,
          	method: "get",      
          	load: function(type, data) {
    		  //Data est la reponse qui est retournée 
    		  alert(data);
    		 // var nodes = data.getElementsByTagName("response")[0].firstChild;
    		//  alert(nodes.length);
     
    		 	refreshData(data);
             	}
             };
     
          dojo.io.bind(bindArgs);	 
          runId = setTimeout("topflop()", 5000);
    }
     
    function refreshData(data) {
       var target = document.getElementById("topflop");	
     
       //target.innerHTML = dojo.dom.innerXML(html);  
      target.innerHTML = data; 
    	  var previousSpot = underlyingArray[0];	  
    	  var newSpot = document.getElementById("topflop").innerHTML;	
    		//alert(newSpot);
    	 underlyingArray[0] = newSpot;
    	 if(previousSpot < newSpot) {
              dojo.lfx.html.highlight(document.getElementById("topflop"),  "#00B440", 1500).play();
          }
          else if(previousSpot > newSpot){
              dojo.lfx.html.highlight(document.getElementById("topflop"),  "#DE0000", 1500).play();
          }
       //dojo.lfx.html.highlight(document.getElementById("topflop"),  "#00B440", 1500).play();
    }



    par contre je ne compred pas pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var spot = data.getElementsByTagName("spot")[0].firstChild;
    ne marche pas

  6. #6
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Parce que si alert(data) t'affiche l'abre, ca veut dire que data est une string, et pas un noeud xml, donc mon code ne peut pas marcher.

    Désolé, je ne connais pas dojo, j'avais cru que ca retournait du xml.

  7. #7
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    Ok merci DoubleU, ta reponse m'a aidé à comprendre beaucoup plus.

    J'ai donc changé pour faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     var bindArgs = {
          	url: "topturboday.do?underlyingID="+underlyingID+"&loc=" + myLocale,
          	method: "get", 
    		mimetype: "text/xml",
          	load: function(type, data) {
    		alert(data);
    		alert("555555"+dojo.dom.isNode(data));
    		alert("66666"+dojo.dom.nextElement(data));
    et la le alert(data) sous IE me dit [object],
    alert("555555"+dojo.dom.isNode(data)) me dit node
    et alert("66666"+dojo.dom.nextElement(data)) me donne null, je ne comprend pas pourquoi et var spot = data.getElementsByTagName("spot")[0].firstChild; me retourne rien du tout.

  8. #8
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Sous ie, si tu fais alert(data.xml); tu obtiens quoi?

  9. #9
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    Lorsque je fais alert(data.xml), j'obtient ceci
    <response>
    <spot>7062.0</spot>
    </response>

  10. #10
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Mouais, je sais pas trop alors pourquoi t'as rien.

    La fonction .xml sous IE permet d'afficher le contenu xml du noeud sous une forme sympathique, donc ca veut dire que tu récupères a priori bien tes données comme il faut.

    J'ai testé en créant un noeud xml a partir de la chaine que tu reçois, et avec data.getElementsByTagName("spot")[0].firstChild; normalement on attrape bien 7062.0.

    Je sais pas pourquoi ca marche pas, ca vient peut être de Dojo qui modifie l'objet. Je ne peux que te conseiller de te plonger dans la doc.

  11. #11
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    Merci DoubleU, je ne comprend pas non plus, en plus quand je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var value = dojo.dom.textContent(data);
    ça m'affiche 7062.0.

    J'ai donc et pour mieux comprendre rajouter ceci dans mon XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <response>
    <spot>7062.0</spot>
    <perf>0.23652365</perf>
    </response>

    du coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var value = dojo.dom.textContent(data); alert(value);
    me retourne :
    7062.00.23652365

  12. #12
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Points : 150
    Points
    150
    Par défaut
    Tu peux me dire comment tu as crée le noeud xml stp ? merci

  13. #13
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Avec la fonction que j'avais donné ici

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

Discussions similaires

  1. [XML] Traiter un retour XML en provenance d'une API
    Par diatonis dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 11/05/2012, 17h02
  2. parser une reponse xml avec content-type="text/html"
    Par roro06 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/10/2010, 11h30
  3. Réponses: 11
    Dernier message: 11/02/2009, 12h44
  4. [MooTools] Traiter une réponse ajax XML avec Mootools
    Par dolu02 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 24/12/2008, 16h58
  5. [AJAX] 2 reponses XML/txt en une seule requete AJAX
    Par seb0634 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/07/2007, 12h45

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