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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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 confirmé
    Inscrit en
    Juin 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 171
    Par défaut XMLHTTPRequest
    Regarde les tutoriels sur XMLHTTPRequest...

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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 Expert 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
    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 éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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 Expert 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
    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 éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    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.

+ 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