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] Charger une page php dans un div


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut [AJAX] Charger une page php dans un div
    Bonjour,

    J'ai un petit soucis avec la méthode que j'emploi, qui visiblement n'est pas bonne.
    Ce que je veux faire, c'est charger une page php dans DIV, via AJAX.
    En clair (enfin on va essayer) j'ai un menu, je clique sur un lien "introduction" qui va lancer une requete ajax chargée de prendre le fichier "introduction.php" et de l'afficher dans un DIV à côté du menu. Physiquement, on est donc resté sur la même page. L'affichage du php, j le fais en récupérant le source et le balançant dans un eval() au retour de la requete ajax.
    Ce principe fonctionne pour tout ce qui est html, mais le php qui passe dans l'eval n'est plus exécuté en tant que php, vu qu'on est revenu côté client, d'où mon problème...
    Comment faire pour charger un php dans ce div mais dont le code php sera exécuté ?

    Si qq'un a une idée... moi je deviens fou

    Merci !
    Seb.

  2. #2
    Membre averti Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Points : 350
    Points
    350
    Par défaut
    Bah en principe peu importe la facon dont tu appelles une page PHP, elle sera toujours exécuté coté serveur et renvoyé crée au client, car apres c'est facile de hack sinon.
    est-ce que tu fais bien (pour faire simple) : document.getElementById("tadiv").innerHTML = (ta page php) ?
    Le forum c'est trop génial

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    merci pour ta réponse Sacha,
    En fait ce que je fais
    1) je clique sur mon lien qui lance une requete ajax vers loadpage.php
    2) ce loadpage.php est chargé de récupérer code source d'un fichier que je lui donne, via ceci

    function GetSource($url) {
    $file = @fopen ($url,"r");
    if (!$file) {
    return null;
    }
    $doc = "";
    while (!feof ($file))
    $doc .= fgets ($file, 1024);
    fclose($file);
    return $doc;
    }
    il faut notamment un addslashes etc,
    il en fait un "echo 'document.getElementById("Main").innerHTML = LesSources" pour que le JS récupère les données

    3) le JS fais un eval() de ce qu'il a reçu, le code source html donc, ca fonctionne très bien.. sauf si le fichier duquel on a récupéré le code source était un *.php. Il affiche l'html s'il y'en a, pas de prob, mais tout ce qui se trouve entre <?php> <?> n'est pas interprêté.. ce qui est logique vu qu'on est côté client.

    Donc j voulais savoir comment avoir le meme résultat mais avec du php qui est interprêté.

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Salut,

    pour précision , ta page php doit elle te renvoyer en retour d'execution (coté serveur) du code HTML (un tableau ou ect ......) pour être afficher dans une div ?

    ou alors ta page php ne renvoi rien et son resultat d'execution est une page HTML que tu souhaites inclure dans une div ?


    Dans l'hypothèse ou ta page php renvoi un flux HTML comment appelle tu cette page via une fonction ajax ? ou par un lien URL (lien de menu par exemple ?)

  5. #5
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    Citation Envoyé par drannh Voir le message
    merci pour ta réponse Sacha,
    En fait ce que je fais
    1) je clique sur mon lien qui lance une requete ajax vers loadpage.php
    2) ce loadpage.php est chargé de récupérer code source d'un fichier que je lui donne, via ceci

    function GetSource($url) {
    $file = @fopen ($url,"r");
    if (!$file) {
    return null;
    }
    $doc = "";
    while (!feof ($file))
    $doc .= fgets ($file, 1024);
    fclose($file);
    return $doc;
    }
    il faut notamment un addslashes etc,
    il en fait un "echo 'document.getElementById("Main").innerHTML = LesSources" pour que le JS récupère les données

    3) le JS fais un eval() de ce qu'il a reçu, le code source html donc, ca fonctionne très bien.. sauf si le fichier duquel on a récupéré le code source était un *.php. Il affiche l'html s'il y'en a, pas de prob, mais tout ce qui se trouve entre <?php> <?> n'est pas interprêté.. ce qui est logique vu qu'on est côté client.

    Donc j voulais savoir comment avoir le meme résultat mais avec du php qui est interprêté.
    pouah pas les innerHTML


    ce qui faut c'est, comme le dit beegood, que la page php te renvoi du HTML
    et faire des innerHTML

    mais c cracra

    ce qui faut c'est que tu envoi une requete asyncrone (XHr, par exemple), que le XHR retourne des infos (XML, JSON ...) que ton javascript créer des éléments HTML à partir des infos que te retourne le XHR
    http://aldorande.miniville.fr/ind
    Fedora 8, eclipse 3.3 sur x86_64
    --------------
    Colorer votre code php

  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
    Je suis pas expert en php, mais on dirait que ton problème vient du fait que ton script php ouvre et lit un fichier (php, html, peu importe). Mais forcément, le contenu lu n'est pas interprété par php, donc il te renvoie le contenu des tags php non interprété... A voir comment en php on peut demander explicitement l'interprétation d'une chaine (un include ne ferait pas la meme chose en fait?)


    ce qui faut c'est que tu envoies une requete asyncrone (XHr, par exemple), que le XHR retourne des infos (XML, JSON ...) que ton javascript créer des éléments HTML à partir des infos que te retourne le XHR
    Ca serait vraiment se galérer pour pas grand chose...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par beegood Voir le message
    Salut,

    pour précision , ta page php doit elle te renvoyer en retour d'execution (coté serveur) du code HTML (un tableau ou ect ......) pour être afficher dans une div ?

    ou alors ta page php ne renvoi rien et son resultat d'execution est une page HTML que tu souhaites inclure dans une div ?


    Dans l'hypothèse ou ta page php renvoi un flux HTML comment appelle tu cette page via une fonction ajax ? ou par un lien URL (lien de menu par exemple ?)
    Euh, J'avoue je ne suis pas trop ce que tu veux dire.
    Toutes mes requetes Ajax appelle on va dire "a.php" avec en parametre la page html ou php qu'il faudra affichier dans le div.
    Ce "a.php" va aller chercher sur le disque la page que j'ai donnée en paramètre et prendre son code source (via la fonction que j'avais donnée supra). C'est ce qu'il renvoit au js qui fais un eval dessus pour l'afficher dans le div.

    Maintenant si tu veux savoir ce que fait la page dont le a.php a pris le code source, ben ca peut être de tout...

    Je ne sais pas si ceci répond à tes questions, en tout cas merci !

    Seb.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Je suis pas expert en php, mais on dirait que ton problème vient du fait que ton script php ouvre et lit un fichier (php, html, peu importe). Mais forcément, le contenu lu n'est pas interprété par php, donc il te renvoie le contenu des tags php non interprété... A voir comment en php on peut demander explicitement l'interprétation d'une chaine (un include ne ferait pas la meme chose en fait?)




    Ca serait vraiment se galérer pour pas grand chose...
    Tu as bien compris mon problème.. et meme que tu l'as deja mieux expliqué lol
    un include interprete il me semble oui, mais comment devrais-je faire pour renvoyer ça au js via la fonction echo en php ?

  9. #9
    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
    includeme.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
       echo "quelque chose";
    ?>
    ajaxhandler.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
       $page = $_GET["tonParametreDeTaRequete"]; //mettons que ca vaut "includeme.php"
       include($page)
    ?>
    Quand tu fais le include, il interprete le contenu du fichier et il le rajoute a ajaxhandler, donc c'est comme si tu avais fait écrit "echo 'quelquechose' "dans ajaxhandler.

    Et ce qui est envoyé en réponse a ta requete Ajax, c'est tout le contenu interprété de ajaxhandler, donc il va interpréter le echo et retourner "quelque chose".

    En fait, la réponse reçue par ta requête ajax, c'est ce que tu aurais affiché a l'écran si tu appelais ton fichier php dans ton navigateur.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    includeme.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
       echo "quelque chose";
    ?>
    ajaxhandler.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
       $page = $_GET["tonParametreDeTaRequete"]; //mettons que ca vaut "includeme.php"
       include($page)
    ?>
    Quand tu fais le include, il interprete le contenu du fichier et il le rajoute a ajaxhandler, donc c'est comme si tu avais fait écrit "echo 'quelquechose' "dans ajaxhandler.

    Et ce qui est envoyé en réponse a ta requete Ajax, c'est tout le contenu interprété de ajaxhandler, donc il va interpréter le echo et retourner "quelque chose".

    En fait, la réponse reçue par ta requête ajax, c'est ce que tu aurais affiché a l'écran si tu appelais ton fichier php dans ton navigateur.
    Je comprends bien ce que tu as mis, mais dans mon includeme.php si jai du code html aussi genre j'invente à la va vite
    <?php>
    ...
    <?>
    <body>
    <p>hello</p>
    <table> <?php>... <?></>
    </body>

    est-ce que ce qui est html sera renvoyé aussi au js ?
    parce que le Js s'attend aussi à recevoir du php une chaine qui comence par "document.innerhtml machin"

    Anyway, je ne sais pas si je saurai encore répondre avant dimanche soir, un long we se prépare...

    merci pour tes réponses en tout cas !

  11. #11
    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
    Le code html ne sera pas interprété (normal, c'est du html) mais il sera renvoyé aussi.

  12. #12
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Salut,

    en faite tu veux inclure une page HTML ? c'est cela ?

    j'ai du mal à comprendre mais tu as une requete ajax qui appel du php et ce même php appelle une autre page php (ou html )?

    c'est bien cela ?

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Le code html ne sera pas interprété (normal, c'est du html) mais il sera renvoyé aussi.
    Ok, j'essayerai alors de rajouter mon document.innerhtml à la chaine (qui contiendra du php interpreté (dc html) et de l'html pure on va dire)
    coté JS avant de faire l'eval.
    En théorie ca devrait donc marcher.

    Ecoute, j'essaye ca dimanche soir, au pire lundi et je reviendrai dire quoi !
    Merci, bon we.
    Seb.

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par beegood Voir le message
    Salut,

    en faite tu veux inclure une page HTML ? c'est cela ?

    j'ai du mal à comprendre mais tu as une requete ajax qui appel du php et ce même php appelle une autre page php (ou html )?

    c'est bien cela ?
    Oui c'est bien ça..
    c'est juste que cette seconde page php est destinée à être affichée dans un div.
    J'essayerai la solution de DoubleU et vous direz quoi.

    Seb.

  15. #15
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    es tu obligé de passer par ce process ? ne peux tu pas appeller ta page php directement depuis ta page principale ? sans ajax et autre page php ?

  16. #16
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    J'ai trouvé une astuce pour inclure des page dans une page html soit:

    <!DOCTYPE html public "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Test objet</title>
    </head>
    <body>
    <object type="text/html" data="object.php" width="160px" height="600px">
    </object>
    </body>
    </html>
    et

    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
     
    html {
     
    	margin: 0;
    	padding: 0;
    	overflow-x: hidden;
    	overflow-y: hidden;
    	border: 0 none;
    }
     
    body {
    	margin: 0;
    	padding: 0;
    	border: 0 none;
    	overflow-x: hidden;
    	overflow-y: hidden;
    	width: 160px;
    	height: 600px;
    }
    je ne l'ai jamais essayé mais je l'avais mis de coté en me disant que peut être donc je ne sais pas si cela peut aider.

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Le code html ne sera pas interprété (normal, c'est du html) mais il sera renvoyé aussi.
    J'ai pu essayé ce que tu m'as dis, ça a l'air de fonctionner, mais j'ai tout de même une "syntax error" lors du retour sur mon eval :

    eval(document.getElementById('Main').innerHTML = xhr.responseText);

    dans le responseText il y a naturellement la page dont j'ai fait l'include en php, et je ne sais pas trop ce qu'il me veut

    Ce serait pas un problème de addslashes ?
    Qaund je fait un alert(xhr.responseText) il me montre le code html tel quel de la page.. est-ce que c'est correct ca ?

    MErci

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par beegood Voir le message
    J'ai trouvé une astuce pour inclure des page dans une page html soit:



    et

    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
     
    html {
     
    	margin: 0;
    	padding: 0;
    	overflow-x: hidden;
    	overflow-y: hidden;
    	border: 0 none;
    }
     
    body {
    	margin: 0;
    	padding: 0;
    	border: 0 none;
    	overflow-x: hidden;
    	overflow-y: hidden;
    	width: 160px;
    	height: 600px;
    }
    je ne l'ai jamais essayé mais je l'avais mis de coté en me disant que peut être donc je ne sais pas si cela peut aider.
    Je te remercie, mais en fait, non, ça ne me sert pas de trop..... dsl..

  19. #19
    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
    Le eval, c'est à utiliser seulement si ta réponse est un script javascript. Si tu retournes du html, faut pas l'utiliser.

    Qaund je fait un alert(xhr.responseText) il me montre le code html tel quel de la page.. est-ce que c'est correct ca ?
    Oui, c'est le fonctionnement normal.

  20. #20
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Salut,

    A première vue , si ton flux renvoyé est une chaine de code html normalement:, il te suffirai de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById('Main').innerHTML = xhr.responseText

Discussions similaires

  1. Charger une page web dans un div
    Par pekre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/07/2015, 22h22
  2. charger une page html dans un div
    Par mantalo dans le forum jQuery
    Réponses: 2
    Dernier message: 16/06/2010, 12h41
  3. Insérer une page JSP dans un DIV avec AJAX
    Par sethi dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 31/03/2010, 21h04
  4. (AJAX) charger une page aspx dans un div
    Par divinThomas dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/04/2008, 13h12
  5. [AJAX] Charger une page dans un div
    Par pcdj dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/07/2007, 20h15

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