[Javascript] Problème rechargement iframe
Résolu
Kitty-cat
Messages postés
141
Date d'inscription
Statut
Membre
Dernière intervention
-
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour bonjour.
Je travaille actuellement sur une GED en PHP avec l'un de mes collègues qui lui aussi est programmeur junior. (Je dirais même plus qu'on est encore étudiants, 'fin bref). Dans un souci d'optimisation, nous souhaitons minimiser le plus possible les rechargements de page. (Avouez qu'il n'est pas très sérieux de recharger la page à chaque fois que l'on clique sur un dossier de l'arborescence.)
Pour ceci, nous avons décidé d'utiliser deux iframes. Celle de gauche qui affiche le treeview, celle de droite qui est sensé afficher les fichiers contenus dans les dossiers. La méthode utilisée pour cela est d'envoyer dans l'url de la frame une variable "Path", qui sera récupérée dans l'autre frame, via un $_GET['Path'].
Nous avons décidé de coder cet envoie en javascript de la façon suivante :
echo indentation($niveau) . "<img src=\"directory.png\" onclick=\"plidepli('".str_replace($replace,"",$str)."')\"> <input type='button' class= 'repertoire' value= '". $str2 ."' <script language = 'javascript'> onclick= parent.frames['\"/contenu.php?path=.'". $tableau ."'\"'].location.reload(); </script><br />\n";
Le problème est qu'évidemment, cela ne fonctionne pas. Nous voudrions donc savoir où se situe l'erreur que nous avons commise, et si possible, que l'on nous explique comment réparer cette erreur.
D'avance je remercie tous ceux qui nous répondront.
Cordialement,
Kitty-cat
Je travaille actuellement sur une GED en PHP avec l'un de mes collègues qui lui aussi est programmeur junior. (Je dirais même plus qu'on est encore étudiants, 'fin bref). Dans un souci d'optimisation, nous souhaitons minimiser le plus possible les rechargements de page. (Avouez qu'il n'est pas très sérieux de recharger la page à chaque fois que l'on clique sur un dossier de l'arborescence.)
Pour ceci, nous avons décidé d'utiliser deux iframes. Celle de gauche qui affiche le treeview, celle de droite qui est sensé afficher les fichiers contenus dans les dossiers. La méthode utilisée pour cela est d'envoyer dans l'url de la frame une variable "Path", qui sera récupérée dans l'autre frame, via un $_GET['Path'].
Nous avons décidé de coder cet envoie en javascript de la façon suivante :
echo indentation($niveau) . "<img src=\"directory.png\" onclick=\"plidepli('".str_replace($replace,"",$str)."')\"> <input type='button' class= 'repertoire' value= '". $str2 ."' <script language = 'javascript'> onclick= parent.frames['\"/contenu.php?path=.'". $tableau ."'\"'].location.reload(); </script><br />\n";
Le problème est qu'évidemment, cela ne fonctionne pas. Nous voudrions donc savoir où se situe l'erreur que nous avons commise, et si possible, que l'on nous explique comment réparer cette erreur.
D'avance je remercie tous ceux qui nous répondront.
Cordialement,
Kitty-cat
A voir également:
- [Javascript] Problème rechargement iframe
- Telecharger javascript - Télécharger - Langages
- Réglo mobile rechargement ✓ - Forum Mobile
- Javascript echo ✓ - Forum PHP
- A javascript error occurred in the main process - Forum Windows
- A javaScript error occurred in the main process - Forum Handicap / Accessibilté
35 réponses
Ca me semble plutot normal. Il y a une erreur de ' dans le onclick (my mistake, sorry).
Sinon il faut remplacer $tableau par ce que tu veux (car effectivement $tabeau est un tableau php, d'ou le fait qu'il te marque le type, remplace la ligne ou il y a le onclick par ca :
EDIT: Plus rapide que moi sur ce coup :), tu n'as donc plus qu'à supprimer le ' en trop (remplace directe par ce que j'ai donné)
Sinon il faut remplacer $tableau par ce que tu veux (car effectivement $tabeau est un tableau php, d'ou le fait qu'il te marque le type, remplace la ligne ou il y a le onclick par ca :
echo indentation($niveau) . "<img src=\"directory.png\" onclick=\"plidepli('".str_replace($replace,"",$str)."')\"> <input type='button' class= 'repertoire' value= '". $str2 ."' onclick= \"callScript('traitement.php','path=".$str."')\"><BR>&qu ot;";
EDIT: Plus rapide que moi sur ce coup :), tu n'as donc plus qu'à supprimer le ' en trop (remplace directe par ce que j'ai donné)
Raté encore une fois XD
Il me met maintenant que mon div "has no properties". (Sans doute est-ce pour cela qu'il m'affiche le message d'erreur au mauvais endroit) Et persiste à me récupérer un path vide j'ai l'impression. Car quand je demande de faire un echo de la valeur de path dans la page php "Traitements", ca me renvoie rien du tout.
Il me met maintenant que mon div "has no properties". (Sans doute est-ce pour cela qu'il m'affiche le message d'erreur au mauvais endroit) Et persiste à me récupérer un path vide j'ai l'impression. Car quand je demande de faire un echo de la valeur de path dans la page php "Traitements", ca me renvoie rien du tout.
Pour le "Path" c'est normal, c'est parce que dans la méthode CallScript je le donne au script PHP via POST et non GET ^^
Donc si tu rectifie comme ceci dans la méthode callScript :
en :
Ca devrait mieux fonctionner.
Pour ce qui est du message d'erreur par contre j'ai besoin de savoir exactement ou et le message en entier (message javascritp donc j'imagine)
Donc si tu rectifie comme ceci dans la méthode callScript :
xhr_object.open("POST", scriptName, true);
en :
xhr_object.open("GET", scriptName, true);
Ca devrait mieux fonctionner.
Pour ce qui est du message d'erreur par contre j'ai besoin de savoir exactement ou et le message en entier (message javascritp donc j'imagine)
En fait ton autre erreur est du au nommage de ta div... attention j'ai dit '<div id="contenu"> ' (sans majuscule), c'est pas pour rien ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mon collègue y avait pensé aussi, mais non non, j'ai bien nommé le div "contenu" aussi.
PS : Et comme un imbécile, j'ai oublié de rappeler ma css. Problème de div reglé, reste à récupérer un path non vide maintenant ^^
PS : Et comme un imbécile, j'ai oublié de rappeler ma css. Problème de div reglé, reste à récupérer un path non vide maintenant ^^
Pour le path non vide j'ai donné la solution un poil plus haut et ca devrait fonctionner normalemment.
Sinon faudrait que tu mette des traves pour voir ou le prog passe dans le code et avec quelle valeur, afin de déterminer ou est ce qu'il perd la valeur du PATH
Par exemple tu peux afficher sa valeur dans la fonction javascript callScript juste avant d'envoyer les données :
Et en début de script PHP, dans 'traitement.php' :
Par exemple tu peux afficher sa valeur dans la fonction javascript callScript juste avant d'envoyer les données :
alert(args); xhr_object.send(args);
Et en début de script PHP, dans 'traitement.php' :
echo "<script language='javascript'>alert('".$_GET['path']."');</script>"; $path = isset($_GET['path']) ? $_GET['path'] : '';
Désolé, j'm'en voulais tellement d'avoir oublié de rappeler ma css que j'ai pu vu que tu avais répondu entre temps ^^'
Néanmoins, si je passe tout en post, cela m'affiche un bon gros "0". En get, cela continue à m'afficher "Rien à afficher".
Néanmoins, si je passe tout en post, cela m'affiche un bon gros "0". En get, cela continue à m'afficher "Rien à afficher".
Je te conseille de toute manière de tout repasser en POST, c'est toujours ca de gagner niveau sureté.
Et puis au moins on a quelque chose même si c'est un bon gros 0 XD
Une fois tout repasser en POST, peux-tu vérifier la chose suivante : essayer de passer en dure une valeur bidon à PATH pour voir ce qu'il affiche dans le script PHP, ex :
Ca permettra de savoir si ca fonctionne et si oui, ca voudra dire que ce n'est pas la bonne variable qui est passée.
Dans le cas contraire... faut encore chercher ^^
Et puis au moins on a quelque chose même si c'est un bon gros 0 XD
Une fois tout repasser en POST, peux-tu vérifier la chose suivante : essayer de passer en dure une valeur bidon à PATH pour voir ce qu'il affiche dans le script PHP, ex :
callScript('traitement.php','path=toto')
Ca permettra de savoir si ca fonctionne et si oui, ca voudra dire que ce n'est pas la bonne variable qui est passée.
Dans le cas contraire... faut encore chercher ^^
Il le perd entre les deux pages apparemment. Car avec le premier alert, ca me met mon path (Crypté en base 64 soit), alors que si je ne met que le deuxième, il n'affiche rien.
Même en mettant un path bidon, avec la méthode post, il s'obstine à m'afficher un 0.
Même en mettant un path bidon, avec la méthode post, il s'obstine à m'afficher un 0.
Ben écoute... je vois pas trop pourquoi il perd la valeur entre les deux, peut etre une configuration du navigateur peut etre ?
Bon, j'ai fini mon service pour ce soir :D donc a demain si tu n'as toujours pas trouvé pourquoi ca bug.
Bon courage di'ci là
Bon, j'ai fini mon service pour ce soir :D donc a demain si tu n'as toujours pas trouvé pourquoi ca bug.
Bon courage di'ci là
Je te remercie ;) J'comptais rentrer chez moi aussi ^^
Et il me semble pourtant bien avoir passé les variables globales à ON.
'fin bref, bonne soirée à toi l'ami ;)
Et il me semble pourtant bien avoir passé les variables globales à ON.
'fin bref, bonne soirée à toi l'ami ;)
Au pire des cas tu peux rester en passant tout à GET, mais cette fois en updatant cette partie du code :
xhr_object.open("GET", "ajax2.php", false);
J'ai finalement réussi (Non sans m'être sérieusement cassé les dents sur le problème quand même). Voici à quoi ressemble la fonction en ajax maintenant :
function callScript ( scriptName, args ){
var xhr_object = null;
if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
xhr_object.open("POST", scriptName, true);
xhr_object.onreadystatechange = function() {
if(xhr_object.readyState == 4) {
//alert(xhr_object.responseText); // DEBUG MODE
//document.write(xhr_object.responseText);
var div = document.getElementById('contenu');
div.innerHTML = xhr_object.responseText;
}
//alert(xhr_object.readyState);
return xhr_object.readyState;
}
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr_object.send(args);
}
//
Mon collègue et moi-même te remercions grandement en tout cas, tu nous auras franchement beaucoup aidé ^^
function callScript ( scriptName, args ){
var xhr_object = null;
if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
xhr_object.open("POST", scriptName, true);
xhr_object.onreadystatechange = function() {
if(xhr_object.readyState == 4) {
//alert(xhr_object.responseText); // DEBUG MODE
//document.write(xhr_object.responseText);
var div = document.getElementById('contenu');
div.innerHTML = xhr_object.responseText;
}
//alert(xhr_object.readyState);
return xhr_object.readyState;
}
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr_object.send(args);
}
//
Mon collègue et moi-même te remercions grandement en tout cas, tu nous auras franchement beaucoup aidé ^^