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

AJAX Discussion :

[AJAX] relation entre ajax, php, xml et xsl


Sujet :

AJAX

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 48
    Points : 32
    Points
    32
    Par défaut [AJAX] relation entre ajax, php, xml et xsl
    Bonjour à tous,
    je ne savais pas trop où mettre la discussion alors si je me suis trompé, j'en suis désolé.

    J'ai fait plusieurs recherches et je n'ai pas réussi à trouver ce que je voulais.
    Voilà mon problème :
    j'ai une page principale en html dans laquelle j'utilise Ajax. Lors d'un clic, j'envoie une requete ajax vers un script php qui réalise une connexion mysql et renvoi du xml et lorsque la réponse est récupérée dans le fichier html le fichier xsl n'est pas pris en compte. Enfin, ce que j'ai fait ne marche pas. Je ne sais pas trop si vous comprenez ce que je veux faire.
    Mais en tout cas, voici mes différents scripts.

    index.html
    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
     
    var xmlHttp = GetXmlHttpObject();
     
    function GetXmlHttpObject() 
    {
      	var objXMLHttp = null ;
      	if (window.XMLHttpRequest) 
    	{ // pour non-IE
        		objXMLHttp = new XMLHttpRequest() ;
      	}
      	else 
    	{
        		if (window.ActiveXObject) 
    		{
          		try 
    			{ // pour IE
            			objXMLHttp =new ActiveXObject("Msxml2.XMLHTTP") ;
          		}
          		catch (e) 
    			{
            			try 
    				{ // pour une autre version de IE
    				objXMLHttp =new ActiveXObject("Microsoft.XMLHTTP") ;
            			}
            			catch (e) 
    				{
              			window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.") ;
            			}
          		}
        		}
      	}
      return objXMLHttp ;
    }
     
    function affiche_groupes()
    {
    	xmlHttp.onreadystatechange=traiterGroupes;
    	xmlHttp.open("GET","liste_groupes.php",true);
    	xmlHttp.send(null);
    }
     
    function traiterGroupes()
    {
    	if (xmlHttp.readyState == 4)
    	{
    		document.getElementById('bloc_principal').innerHTML = xmlHttp.responseXML;
    	}
    }

    liste_groupes.php
    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
     
    header("Content-Type: text/xml" );
    session_start();
     
    if (isset($_SESSION['idUser']))
    {
    	include_once("./connexion/connexion.inc.php");
     
    	// Connexion automatique
    	$req=connexion::requete("SELECT * FROM GROUPE") ;
     
    	$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
    	$xml .= '<?xml-stylesheet type="text/xsl" href="./liste_groupes.xsl"?>';
    	$xml .= '<!DOCTYPE groupes SYSTEM "./liste_groupes.dtd">';
     
    	$xml .= "<groupes>";
    	while (($ligne = mysql_fetch_array($req))!== false)
    	{
    		$xml .= "<groupe>";
    		$xml .= "<id>".$ligne['idGroup']."</id>";
    		$xml .= "<image>&lt;img src='./images/".$ligne['imgGroup']."' width='60' height='50'&gt;</image>";
    		$xml .= "<nom>".$ligne['nomGroup']."</nom>";
    		$xml .= "<description>".$ligne['descrGroup']."</description>";
    		$xml .= "</groupe>";
    	}
    	// Déconnexion automatique en fin de script
    	$xml .= "</groupes>";
     
    	echo $xml;
    }

    liste_groupes.xsl
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:template match="/">
    	<html>
    	<body>
    	<table border="1">
    		<xsl:for-each select="groupes/groupe/">
    			<tr>
    				<td><xsl:value-of select="id"/></td>
    				<td><xsl:value-of select='image'/></td>
    				<td><xsl:value-of select="nom"/></td>
    				<td><xsl:value-of select="description"/></td>
    			</tr>
    		</xsl:for-each>
    	</table>
    	</body>
    	</html>
    </xsl:template>
    </xsl:stylesheet>

    Donc comment je dois faire pour que mon fichier xsl soit pris en compte dans index.html lors de l'affichage ?

    Merci à tous ceux qui répondront.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut.

    Ce qu'il faut comprendre, c'est que le XML utilisé avec AJAX doit s'entendre comme un format d'échange de données et non un format d'affichage.
    Le XML ne peut être affiché avec un XSL que s'il est considéré (au sens du DOM) comme un objet document, ce qui n'est pas le cas si tu l'intègres dans une div.
    Essaye plutôt de gérer le src d'une iframe plutôt que de passer par AJAX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function affiche_groupes()
    {
    	document.getElementById('ton_iframe').src = "liste_groupes.php";
    }

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 48
    Points : 32
    Points
    32
    Par défaut
    J'suis désolé mais il me faut absolument utiliser Ajax.
    C'est pour un projet universitaire, donc il faut respecter les contraintes données.

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    orsque la réponse est récupérée dans le fichier html le fichier xsl n'est pas pris en compte
    Simplement parce que tu ne fais pas la transformation !

    Et ce n'est pas ta ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml .= '<?xml-stylesheet type="text/xsl" href="./liste_groupes.xsl"?>';
    qui changera quelque chose. Ton XML reçu est vu comme un simple doc XML ce qui est différent de l'affichage par le navigateur d'une page XML dont il assure lui-même la transformation XSLT si la feuille de style est indiquée.

    Donc, une fois généré ton contenu XML dans liste_groupes.php, fais ta transformation XSLT dans la continuité (toujours dans liste_groupes.php) puis tu renvoies son résultat.

    Sinon il te faudra faire la transformation sur le poste client ce qui donnera un code dépendant de IE ou Firefox ou autre (pas une bonne solution).

    ERE

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 48
    Points : 32
    Points
    32
    Par défaut
    Ok.
    J'ai essayé plusieurs fonctions telles que XSLTPRocessor dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // CHargement du source XML
    $xml = new DOMDocument;
    $xml->load('collection.xml');
     
    $xsl = new DOMDocument;
    $xsl->load('collection.xsl');
     
    // Configuration du transformateur
    $proc = new XSLTProcessor;
    $proc->importStyleSheet($xsl); // attachement des règles xsl
     
    echo $proc->transformToXML($xml);
    mais en vain car la fonction n'est pas reconnue. Apparemment, faudrait installer une librairie pour pouvoir l'utiliser.
    N'y aurait-il pas une manière de faire sans avoir besoin d'installer des librairies ?

  6. #6
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    A un moment il faut bien avoir une librairie pour effectuer la transformation

    Si tu ne l'as pas sur le server, reste plus qu'à faire la transformation sur le poste client, en javascript.

    ERE

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 48
    Points : 32
    Points
    32
    Par défaut
    Bien galère tout ça quand même. Pourquoi ne font-ils pas des versions de php avec tout intégré franchement ? Ca serait plus simple.

  8. #8
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    SAlut,

    Tout simplement parce qu'il en existe des dizaines et que cela ne sert à rien de charger des librairies si elle ne sont pas indispensables.

    Courage ,
    ERE

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par narcis60floyjo Voir le message
    Pourquoi ne font-ils pas des versions de php avec tout intégré franchement ?
    Probablement parce que tu ne cherches pas à utiliser celles qui sont déjà intégrées
    SimpleXML par exemple.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 48
    Points : 32
    Points
    32
    Par défaut
    J'utilise déjà SimpleXML mais pour le moment je n'ai jamais vu d'exemple permettant de combiner un xsl avec un xml grace à ça. Donc voilà !
    Mais pour pouvoir rendre un travail correct, visuellement parlant, je me suis penché sur le javascript pour parcourir le xml renvoyé.
    Et je crois que je ferai comme ça pour tous mes affichages.

    Merci quand même.

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

Discussions similaires

  1. [AJAX] Relation entre Ajax/Php/Executable
    Par Thedahu dans le forum AJAX
    Réponses: 1
    Dernier message: 30/06/2014, 16h28
  2. [AJAX] relation entre ajax et php
    Par addrock dans le forum AJAX
    Réponses: 2
    Dernier message: 14/04/2012, 22h52
  3. Réponses: 4
    Dernier message: 27/12/2009, 16h12
  4. [AJAX] Conflit entre Ajax et Js sous IE
    Par delf013 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/05/2007, 14h00
  5. [AJAX] Conflit entre Ajax et Javascript
    Par cocaetjusdorange dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/05/2006, 18h16

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