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] xml + php / javascript,problèmes de compréhension


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut [AJAX] xml + php / javascript,problèmes de compréhension
    bonjour tout le monde

    j'essaye actuellement de développer un script de statistiques de serveurs vocaux. Ce script marche comme ceci :
    il y a un script php local sur chaque serveur et un script distant sur un autre serveur.
    Chaque script local s'adresse à une BD et renvoie une réponse XML.
    Enfin le script distant fais un echo en xml de tous les scripts locaux.

    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
     
    echo '<listServers>';
    $bd=new bd();
    $bd->connectBase('localhost','root','','script');
    $req='SELECT ipServer, pathScript, serverName FROM server'; 
    $res=$bd->executeRequete($req);
     
    $nbServer=mysql_num_rows($bd->resultatRequete);
    if($nbServer>0) {
    	while($m=$bd->getLigneResultatSuivante()) {
    		$adresse='http://';
    		$adresse.=$m['ipServer'];
    		$adresse.=$m['pathScript'].'?vers='.$ver.'&nbDays='.$nbDays.'&nbHours='.$nbHours;
    		$page=@file_get_contents($adresse);
    		echo '<server nom="'.$m['serverName'].'">';
    		echo $page;
    		echo '</server>';
    	}
    }
    echo '</listServers>';
    de ce fait je peux afficher les résultats avec un fichier XSLT.
    Bref, le fait est que je voudrais afficher tout ca sans php et sans XSLT.
    J'ai donc pensé au javascript. Et javascript + xml ca a donné ajax !
    Après de nombreuses lectures depuis ce matin, j'ai essayé de nombreuses fois de faire marcher ce script :
    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
     
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <title>Liste des DVD</title>
    <script src="script.js" type="text/javascript"></script>
    </head>
    <body>
    <script type="text/javascript">
    <!--
     
    var xhr = getXMLHttpRequest();
    xhr.onreadystatechange = handleHttpResponse;
     
    var url = "remote_script.php?version=light&nbDays=0&nbHours=2";
    xhr.open("GET", url, true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send(null);
     
    function handleHttpResponse() {
    	if(xhr.readyState == 4 && xhr.status == 200) {
                             alert(xhr.responseXML)
    		var items    = response.getElementsByTagName("server");
    		var html     = ''; 
    		count        = items.length;
    		for(i = 0; i < count; i++) { 
    			html += '<h1>' + items[i].getElementsByTagName("nbCurrentCalls")[0].firstChild.nodeValue + '</h1>';
    			html += items[i].getElementsByTagName("nbLastHourCall")[0].firstChild.nodeValue;
    			html += items[i].getElementsByTagName("dureeLastHourCall")[0].firstChild.nodeValue;
    		}
    		document.getElementById('content').innerHTML += html;
    	}
    }
     
    -->
    </script>
    <div id="content"></div>
    </body>
    </html>
    malheureusement sans réussite ...
    j'ai essayé de faire un alert(xhr.responseXML)
    il me renvoie null
    si je fais un alert(xhr.responseXML) il me renvoie bien tout le xml dans l'alert...
    merci d'avance

    ps : mon fichier XML est de la forme :

    listServers
    - server nom=" " (autant que de serveurs)
    - current (autant que d'appels en cours)
    arboName
    callStart
    duration
    - stats
    nbCurrentCalls
    nbLastHourCall
    dureeLastHourCall
    dureeLastDayCall
    nbLastDayCall

    [edit] : j'ai rajouté le text/xml dans ma page et depuis j'ai réussi à
    afficher : undefinedundefinedundefined dans ma page résultat ...
    je pense que maintenant le résultat xml parvient à la page mais je n'arrive pas à l'afficher ...
    quelqu un pourrait il m'aider à faire l'affichage du fichier xml qui est donné en dessous svp svp

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    bon j'ai l'impression que d'après ce que m'affiche tout ca il me manque que savoir parser mon fichier XML avec javascript.

    j'y arrive vraiment pas
    j'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function handleHttpResponse() {
    	if(xhr.readyState == 4 && xhr.status == 200) {
    		var docXML= xhr.responseXML;
    		servers=docXML.getElementsByTagName('server');
    		stats=servers[0].getElementsByTagName('stats');
    		html+=stats[0].getElementsByTagName('nbCurrentCalls');
    	}
    	document.getElementById('content').innerHTML += html;
    }
    </script>
    <div id="content"></div>
    </body>
    et firefox me répond
    -->[object HTMLCollection]

    je sais plus quoi faire, je suis allé voir la doc du DOM mais toujours rien
    svp j'ai besoin d'aide....

  3. #3
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par AsQuel
    et firefox me répond
    -->[object HTMLCollection]
    Normal,
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    html+=stats[0].getElementsByTagName('nbCurrentCalls');
    getElementsByTagName te retourne bien une collection de noeuds. Donc ajouter ca dans une chaine de caractère, c'est pas l'idéal....

    Il faut faire une boucle sur ces élements (ou prendre le premier si ça te suffit) et acceder au texte contenu avec
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .firstChild.data

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    c'est juste, merci

    j'ai essayé ca marche mieux mais j'ai encore quelques problèmes de compréhension :

    je suis sur que j'ai plusieurs balises server
    mais une fois dans server je sais que je ne peux avoir que une balise stats par server.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(i = 0; i < servers.length; i++) {
    			stats=servers[i].getElementsByTagName("stats");
    			html+=stats[0].getElementsByTagName("nbCurrentCalls")[0].firstChild.data; 
    		}
    	}
    	document.getElementById("content").innerHTML += html;
    ceci marche, mais pourquoi suis je obligé de mettre stats[0] ??

    [edit ] a oui j'oubliais, une petite dernière question :

    ma balise server en xml est de ce type là : <server name="xxxxx"> j'ai besoin d'afficher le nom, pourriez vous me dire comment faire ?

  5. #5
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par AsQuel
    ceci marche, mais pourquoi suis je obligé de mettre stats[0] ??
    Toi t'es sur, mais JS ne peut pas savoir. getElementsByTagName renvoie toujours un tableau, même si il n'y a qu'un élement..... C'est la signature de la méthode, t'as pas le choix

    Citation Envoyé par AsQuel
    ma balise server en xml est de ce type là : <server name="xxxxx"> j'ai besoin d'afficher le nom, pourriez vous me dire comment faire ?
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom=servers[i].name;

    ou encore, pour être 100% DOM:
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom=servers[i].getAttribute('name');

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    merci beaucoup
    tout ca marche !!

    j'ai suivi un tuto pour faire cette partie là :

    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
     
    stats=servers[i].getElementsByTagName("stats");
    			nom=servers[i].getAttribute('nom');
    			html+='Serveur ' + nom + ' : '+ stats[0].getElementsByTagName("nbCurrentCalls")[0].firstChild.data; +'<br/>';
    			html+='<table border="1" width="200"><tr><th></th><th>Nb calls</th><th>Durée</th></tr>';	
    			html+='<tr>	<td><b>Heure(s)</b></td>';
    			html+='<td>'+ stats[0].getElementsByTagName("nbLastHourCall")[0].firstChild.data;' + </td>';
    			html+='<td>'+ stats[0].getElementsByTagName("dureeLastHourCall")[0].firstChild.data;' + </td>';
    			html+='</tr>';
    			html+='<tr>	<td><b>Jour</b></td>';
    			html+='<td>'+ stats[0].getElementsByTagName("nbLastDayCall")[0].firstChild.data;' + </td>';
    			html+='<td>'+ stats[0].getElementsByTagName("dureeLastDayCall")[0].firstChild.data;' + </td>';
    			html+='</tr>';  
    			html+='</table>';
    			html+='<br/>';
    mais tu m'as dit, "pourquoi met tu tout ca dans une string"
    y a t il une autre méthode que de mettre tout dans une string ?

  7. #7
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par AsQuel
    mais tu m'as dit, "pourquoi met tu tout ca dans une string"
    y a t il une autre méthode que de mettre tout dans une string ?
    (je vois pas ou je l'ai dit)

    Mais il y a une alternative, un peu plus complexe, mais plus compréhensible (d'après moi):
    http://javascript.developpez.com/faq...DOM#DOMajouter

Discussions similaires

  1. Xml xsl javascript problème d'affichage de liste
    Par zedzander dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 25/11/2015, 15h03
  2. [PHP-Javascript] Problème exécution
    Par kamy86 dans le forum Langage
    Réponses: 4
    Dernier message: 17/07/2009, 15h48
  3. [Génération XML en JavaScript] Problème avec l'attribut xmlns
    Par LeHibou dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 11/08/2008, 16h30
  4. Affichage xml,php, javascript..
    Par magicpapillon77 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 04/08/2008, 12h56
  5. [AJAX] Communication PHP ~ JavaScript
    Par TheBaeK1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/05/2006, 18h24

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