Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2008, 18h52   #1
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
Par défaut 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.
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 21h53   #2
Membre éclairé
 
Avatar de Sacha999
 
Paul Gwen
Inscription : mars 2007
Messages : 289
Détails du profil
Informations personnelles :
Nom : Paul Gwen
Âge : 32

Informations forums :
Inscription : mars 2007
Messages : 289
Points : 302
Points : 302
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) ?
Sacha999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 22h14   #3
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
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é.
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 08h34   #4
Membre chevronné
 
Avatar de shaun_the_sheep
 
Homme
Chef de projet NTIC
Inscription : octobre 2004
Messages : 1 149
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 149
Points : 605
Points : 605
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 ?)
shaun_the_sheep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 10h25   #5
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

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

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
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
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 10h35   #6
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
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?)


Citation:
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...
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 14h59   #7
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
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.
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h04   #8
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
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 ?
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h26   #9
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
includeme.php
Code :
1
2
3
<?php
   echo "quelque chose";
?>
ajaxhandler.php
Code :
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.
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h42   #10
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
Citation:
Envoyé par DoubleU Voir le message
includeme.php
Code :
1
2
3
<?php
   echo "quelque chose";
?>
ajaxhandler.php
Code :
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 !
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h48   #11
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
Le code html ne sera pas interprété (normal, c'est du html) mais il sera renvoyé aussi.
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h53   #12
Membre chevronné
 
Avatar de shaun_the_sheep
 
Homme
Chef de projet NTIC
Inscription : octobre 2004
Messages : 1 149
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 149
Points : 605
Points : 605
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 ?
shaun_the_sheep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h53   #13
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
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.
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h55   #14
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
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.
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h58   #15
Membre chevronné
 
Avatar de shaun_the_sheep
 
Homme
Chef de projet NTIC
Inscription : octobre 2004
Messages : 1 149
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 149
Points : 605
Points : 605
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 ?
shaun_the_sheep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 16h03   #16
Membre chevronné
 
Avatar de shaun_the_sheep
 
Homme
Chef de projet NTIC
Inscription : octobre 2004
Messages : 1 149
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 149
Points : 605
Points : 605
J'ai trouvé une astuce pour inclure des page dans une page html soit:

Citation:
<!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 :
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.
shaun_the_sheep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2008, 19h05   #17
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
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
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2008, 19h05   #18
Invité de passage
 
Inscription : décembre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 17
Points : 0
Points : 0
Citation:
Envoyé par beegood Voir le message
J'ai trouvé une astuce pour inclure des page dans une page html soit:



et

Code :
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..
drannh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 09h24   #19
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
Le eval, c'est à utiliser seulement si ta réponse est un script javascript. Si tu retournes du html, faut pas l'utiliser.

Citation:
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.
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 13h50   #20
Membre chevronné
 
Avatar de shaun_the_sheep
 
Homme
Chef de projet NTIC
Inscription : octobre 2004
Messages : 1 149
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 149
Points : 605
Points : 605
Salut,

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

Code :
1
2
 
document.getElementById('Main').innerHTML = xhr.responseText
shaun_the_sheep est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h51.


 
 
 
 
Partenaires

Hébergement Web