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 :

XMLHttpRequest.responseXML et XMLDocument


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut XMLHttpRequest.responseXML et XMLDocument
    Bonjour à tous,

    J'ai un problème, je ne comprend pas du tout comment fonctionne c'est deux objet. Dans mon petit exemple j'envoi une requète a mon serveur et il me renvoit les donné dans un flux comme suis:

    Exemple avec les JSP:
    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
     
    int provinceId = new Integer(req.getParameter("state")).intValue();
    resp.setHeader("Content-type",req.getContentType());
    resp.setCharacterEncoding(req.getCharacterEncoding()); 	
    String xmlFile = "<?xml version='1.0' standalone='yes' ?>"+
                            "\n<listVille>"+
                            "\n\t<ville>\n\t\t<num>0</num>\n\t\t<nom>Aucune sélection</nom>\n\t</ville>";
    Connection connectBD = DriverManager.getConnection(this.urlBD);
    ResultSet rs = connectBD.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE).executeQuery("select * from Ville where province="+provinceId);
    while (rs.next()) {
      xmlFile += "\n\t<ville>\n\t\t<num>"+rs.getInt("id")+"</num>\n\t\t<nom>"+rs.getString("nom")+"</nom>\n\t</ville>";
    }
    xmlFile += "\n</listVille>";
    rs.close();
    connectBD.close();
    resp.getWriter().println(xmlFile);
    Ensuite, quand je veux lire les données du côté client, sa marche pas. Quand je fais XMLHttpRequest.responseXML ça fonction je reçois un objet, et j'ai plus vérifier que c'étais un XMLDocument en exécutant le meme script sur firefox en faisant un alert(XMLHttpRequest.responseXML).

    Rendu à cette étape je n'arrive pas a accèder à l'élément principal(root node), sous internet explorer ça me dit "null" et sur firefox le alert n'apparait meme pas sur XMLHttpRequest.responseXML.getElementByTagName("listVille"). En gros voilà mon script côté client.

    Création de la requête:
    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
     
    http_request = false;
    if (window.XMLHttpRequest) http_request = new XMLHttpRequest();
    else {
      if (window.ActiveXObject) {
         try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); }
         catch (e) { 
            try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); }
            catch (e1) {}
         }
      }
    }
    if (http_request) {
      http_request.onreadystatechange = update;
      http_request.open("GET", url+"?state="+state_Id, true);
      http_request.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1");
      http_request.send(null);
    }

    Réception des données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function update() {
      if (http_request.readyState == 4) {
        if (http_request.status == 200) {
           var xmlDoc = http_request.responseXML;
           alert("XMLDoc: "+xmlDoc);
           var root_node = xmlDoc.getElementsByTagName("listVille")
           alert("RootNode: "+root_node);  //Marche po... :'(
           //Je sais plus koi faire
        }
        else alert("Error no."+http_request.status+"\nAn error occur while receiving data");
      }
    }
    Avec un responseText j'ai pas de problème, mais responseXML chu fourrer, merci d'avance de m'aider.

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var xmlDoc = http_request.responseXML.documentElement;
    et ça devrais aller mieux

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut
    Bonjour j'ai règler mon problème je crois et je voulais vous faire part de ce que j'ai fais... Voilà en gros il faut premièrement aller chercher l'élément avec XMLHttpRequest.responseXML.documentElement. Ensuite, il faut savoir comment il y a de sous-élément avec la méthode XMLHttpRequest.responseXML.documentElement.childNodes.length, avec le nombre d'élément l'on peu faire une boucle sur chaque élément comme suis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var nbrElement = XMLHttpRequest.responseXML.documentElement.childNodes.length
    for (index=0;index<nbrElement;index++) {
      var currentNode = XMLHttpRequest.responseXML.documentElement.childNodes[index]
      //do something with the node
    }
    Pour aller chercher des attribut sur le node on peu utiliser la collection XMLHttpRequest.responseXML.documentElement.childNodes[index].attributes. Il est préférable d'utiliser un index pour aller chercher l'attribut comme suis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var attributValue = XMLHttpRequest.responseXML.documentElement.childNodes[index].attributes[0].value
    Pour obtenir la valeur de l'élément il faut utiliser les propiétés XMLHttpRequest.responseXML.documentElement.childNodes[index].firstChild.data. Un des problèmes que j'ai encore est que lorsque le formulaire est envoyé, si je fais back dans le navigateur, la valeur du 2e comboBox(celui générer avec le XMLDocument) revient à sa valeur initiale.

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

Discussions similaires

  1. [AJAX] xmlHTTPRequest.responseXML trop long ?
    Par firgon dans le forum AJAX
    Réponses: 0
    Dernier message: 06/04/2013, 23h01
  2. [AJAX] XMLHttpRequest.responseXML et ie6
    Par toshTosh dans le forum AJAX
    Réponses: 4
    Dernier message: 17/11/2010, 16h02
  3. XMLHttpRequest, responseXML et xml invalide
    Par Underground78 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/05/2008, 21h03
  4. [AJAX] responseXML xmlhttprequest .
    Par Alex35 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/04/2007, 17h24
  5. XmlHTTPRequest : responseText ou responseXML?
    Par bud_gw dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/06/2006, 14h58

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