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 :

[AJAX] récupération data xml depuis AJAX


Sujet :

JavaScript

  1. #1
    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 [AJAX] récupération data xml depuis AJAX
    Bonjour,
    Je fait exécuter une requête via un fichier php appelé depuis un fichier js. La requête s'exécute bien (je fait une copie dans un fichier xml). Mais je ne récupère rien dans response.xml dans le fichier js.
    Quelqu'un a-t-il déjà galéré là-dessus svp ? Cela fait un mois que je tourne en rond et en bourrique d'ailleurs aussi !

  2. #2
    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
    Sans code, je vois mal ce qu'on peut faire...

  3. #3
    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 oui voici le code
    MErci DoubleU..Tu as raison mais je ne voulais pas "décourager" les bonnes âmes prêtes à se pencher sur ce pb. Voici donc le code php :
    //déclaration nouveau ficher
    //$doc = new DOMDocument('1.0', 'UTF-8');
    $doc = new DOMDocument('1.0', 'iso-8859-1');
    $result = $doc->createElement('result');
    $bid=$result->setAttribute('id',"resultat");


    if ($retour !="1")
    {
    $requete = $doc->createElement('requete', $Req);
    $erreurSql = $doc->createElement('message',ora_error($BaseOracle->MyIdSess));
    $erreur = $doc->createElement('erreur');
    $erreur->appendChild($requete);
    $erreur->appendChild($erreurSql);
    $result->appendChild($erreur);
    }
    else
    {
    // Résultat de la requête
    While ($rst=$BaseOracle->MapArray()) // récupération du résultat de la requête dans l'objet $rst
    {
    $result->appendChild($doc->createElement('PAT_IPP', $rst["PAT_IPP"]));
    $result->appendChild($doc->createElement('ETC_NOM', $rst["ETC_NOM"]));
    $result->appendChild($doc->createElement('ETC_PRN', $rst["ETC_PRN"]));
    $result->appendChild($doc->createElement('ETC_DDN', $rst["ETC_DDN"]));
    }
    }

    $doc->appendChild($result);

    // sauvegarde du document
    $test = $doc->save("resultat.xml");
    echo $doc->saveXML();

    Pour le js :
    var http_request = false;
    var param="var1="+typebase+"&var2="+host+"&var3="+port+"&var4="+base+"&var5="+id+"&var6="+pass+"&var7="+opt+"&var8="+req;

    if (window.XMLHttpRequest)
    { /* Mozilla, Safari, IE7... */
    http_request = new XMLHttpRequest();
    var navigateur=1;
    if (http_request.overrideMimeType)
    {
    http_request.overrideMimeType('text/xml; charset=ISO-8859-1');
    /* http_request.overrideMimeType('text/xml; charset=UTF-8'); */
    }
    }
    else if(window.ActiveXObject)
    { /* IE <7 */
    try{
    http_request = new ActiveXObject("Msxml2.XMLDOM"); /* IE6 */
    var navigateur=2;
    }catch(e){
    try{
    http_request = new ActiveXObject("Microsoft.XMLDOM"); /* IE5 */
    var navigateur=3;

    }catch(e){}
    }
    }
    if (!http_request)
    {
    alert('Cannot create an XMLHttp instance');
    return false;
    }
    /* var url2=url+param; */
    http_request.open('POST', url, true);
    /* http_request.open('GET', url2, true); */
    http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1");

    http_request.onreadystatechange = function()
    {
    if (http_request.readyState != 4)
    {
    /* document.getElementById(div).innerHTML = "<div class='loading'>Loading...</div>"; */
    }
    else
    {
    if (http_request.status == 200)
    {
    if (navigateur==1)
    {
    var results=http_request.responseXML;
    }
    else
    {
    var results=http_request.loadXML(http_request.responseText);
    }
    suite(results);
    }
    else
    {
    alert('There was a problem with the request.');
    }
    }
    }
    http_request.send(param);
    /* http_request.send(null); */
    }

    function suite(r)
    {
    var enreg=r.getElementsByTagName("RESULT");
    var nombre=enreg.length;
    alert(nombre);
    ...etc... nombre est toujours égal à "0" alors que le fichier xml donne :
    <?xml version="1.0" encoding="iso-8859-1"?>
    <result id="resultat"><PAT_IPP>3098</PAT_IPP><ETC_NOM>ABADIE</ETC_NOM><ETC_PRN>Amelie</ETC_PRN><ETC_DDN>18/06/50</ETC_DDN><PAT_IPP>60730</PAT_IPP><ETC_NOM>ABADIE</ETC_NOM><ETC_PRN>FRANCIS</ETC_PRN><ETC_DDN>27/05/36</ETC_DDN><PAT_IPP>37362</PAT_IPP><ETC_NOM>ABADIE</ETC_NOM><ETC_PRN>Francis</ETC_PRN><ETC_DDN>01/11/56</ETC_DDN><PAT_IPP>63397</PAT_IPP><ETC_NOM>ABADIE</ETC_NOM><ETC_PRN>JEAN PIERRE</ETC_PRN><ETC_DDN>17/08/77</ETC_DDN><PAT_IPP>58999</PAT_IPP><ETC_NOM>ABADIE</ETC_NOM><ETC_PRN>NICOLE</ETC_PRN><ETC_DDN>24/11/68</ETC_DDN></result>

  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
    echo $doc->saveXML();
    Je connais pas le php, ca fait quoi ca? ca écrit ton arbre dans la sortie?

    Quoiqu'il en soit, c'est normal que coté js tu n'arrives pas à récupérer le responseXML car il te manque dans ton php un header pour indiquer que tu retournes du xml.

    Tu peux aussi essayer responseText à la place de responseXML. Si tu as bien ce que tu veux, c'est que la cause est probablement celle que décrite au dessus.

  5. #5
    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 header dans le fichier php
    en début de mon php (qui génère le xml) il y a :
    header('Content-type: text/xml');
    peut-être n'est-ce pas cela qu'il fallait faire ? peut-être est-il mal positionné ?
    Merci de ton aide.

  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
    Nan c'est bien ca.

    T'as essayé de regarder le responseText pour voir ce que tu recevais?

  7. #7
    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 responsetext
    Oui DoubleU en responseText je reçois quelque chose. Cela doit sans doute signifier que la génération de mon flux XML n'est pas bonne (c'est à dire pas au format XML)...mais je ne sais pas comment procéder alors (cf. la boucle While de mon code php)...

  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
    En fait, si tu reçois bien le responseText avec ce que tu cherches dedans mais que le responseXML est vide, c'est peut etre à cause du header qui est mal mis. Si tu utilises firebug, a chaque fois qu'une requête/réponse passe tu peux en voir le contenu et les headers. Regarde bien si dans la réponse, le header xml est bien mis.

    Sinon, autre possibilité, ca m'est déja arrivé que la réponse à une requête soit tellement grosse qu'il n'arrivait pas à générer le xml. J'avais écrit une fonction à qui je passais le responseText et qui me ressortait le xml correspondant. Ca devrait marcher aussi mais je pense qu'il vaudrait mieux arriver à utiliser le responseXML de base.

    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
    function xmlStringToXmlNode(xmlTxt){
     
    	var parser = null;
    	var xml = null;
     
    	try{
    		parser = new ActiveXObject('Microsoft.XMLDOM');
    		parser.async = false;
    		parser.loadXML(xmlTxt);
    		xml = parser.documentElement;
    	}
    	catch(e){
    		parser = new DOMParser();
    		xml = parser.parseFromString(xmlTxt,"text/xml").documentElement;
    	}
     
    	return xml;
     
    }

  9. #9
    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 cela fonctionne !
    Merci DoubleU. Voici le bout de code final du fichier js qui fonctionne (r étant le retour du response XML).
    function suite(r)
    {
    var enreg=r.getElementsByTagName("result");
    var nombre=enreg.length;
    var listeipp="";

    for(j = 0; j < nombre; j++)
    {
    var items = r.getElementsByTagName("PAT_IPP"); /* Récupérer la liste des items */

    listeipp +="<select name='IPP_Patient'>"; /* construction de l'affichage HTML */
    for(i = 0; i < items.length; i++) /* POUR CHAQUE item */
    {
    listeipp += r.getElementsByTagName("PAT_IPP")[i].childNodes[0].nodeValue;
    listeipp += " ";
    listeipp += r.getElementsByTagName("ETC_NOM")[i].childNodes[0].nodeValue;
    listeipp += " ";
    listeipp += r.getElementsByTagName("ETC_PRN")[i].childNodes[0].nodeValue;
    listeipp += " ";
    listeipp += r.getElementsByTagName("ETC_DDN")[i].childNodes[0].nodeValue;
    listeipp += "<option value=\"items[i].getElementById('PAT_IPP').value\">";
    }
    }
    listeipp +="</select>";
    document.write(listeipp);
    }

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

Discussions similaires

  1. Récupération de data durant appel $.ajax
    Par Guillaume_Caldera dans le forum jQuery
    Réponses: 5
    Dernier message: 21/09/2011, 11h51
  2. [Prototype] Ajax.updater et récupération de valeurs depuis un formulaire
    Par Skiant dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 09/01/2009, 16h31
  3. [Servlet] recuperer fichier xml depuis AJAX
    Par robocop2776 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 13/08/2008, 14h51
  4. [AJAX] récupération de formulaire avec AJAX
    Par abda1000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/03/2007, 09h59
  5. [AJAX] Récupération tronquée de donnée binaire via XMLHttpRequest
    Par Christophe Charron dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/06/2006, 18h21

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