Problème de rafraîchissement d'une page parent [Résolu]

ideschamps 20 Messages postés mercredi 3 septembre 2003Date d'inscription 4 avril 2007 Dernière intervention - 29 mars 2007 à 17:15 - Dernière réponse : PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention
- 4 avril 2007 à 19:57
Bonjour,

Voilà je suis en train de modifier une application existante basée sur le principe de contrôleur.
J'ai donc à chaque appel de fonctionnalité mon contrôleur principal qui redirige vers le sous controleur adéquat.

Dans une page, j'ouvre une fenêtre comme une popup dans laquelle je peux modifier des données. Suite à la validation, les données sont enregistrées en base de données mysql depuis le popup.
Ensuite, je voudrais rafraîchir la fenêtre parent.
Je le fais par : window.opener.location.reload(); depuis le popup sur un bouton valider.

Ma fenêtre parent se recharge bien, mais pas avec les nouvelles données. Il faut que je rappuie sur mon bouton valider une deuxième fois pour que l'affichage soit correct.

Quelqu'un aurait il une idée car je suis coincée ? est-ce à cause des contrôleurs ?

Merci de votre aide.

Isa
Afficher la suite 

16 réponses

Répondre au sujet
ideschamps 20 Messages postés mercredi 3 septembre 2003Date d'inscription 4 avril 2007 Dernière intervention - 4 avril 2007 à 11:57
+3
Utile
Bonjour,

Je viens de trouver comment faire.
Je ne passe plus par ma fonction Recharge(), mais j'ai ajouté en fin de page les fonctions suivantes :
javascript: window.opener.location.href = href;
javascript: window.setTimeout("self.close();",2000);
en testant si j'ai les conditions php requises.

Merci pour votre aide.

Isa
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ideschamps
cs_roro06 732 Messages postés jeudi 2 janvier 2003Date d'inscription 29 octobre 2007 Dernière intervention - 29 mars 2007 à 17:29
0
Utile
Bonjour




Je ne sais pas ce qu'est un contrôleur, mais avec window.opener.location.reload(true); tu forceras ton navigateur à recharger effectivement la page depuis le serveur et non depuis le cache.

PS c'est quoi, le principe de contrôleur ?

Cordialement
Roro webDev
Commenter la réponse de cs_roro06
ideschamps 20 Messages postés mercredi 3 septembre 2003Date d'inscription 4 avril 2007 Dernière intervention - 29 mars 2007 à 17:35
0
Utile
Merci pour ta réponse aussi rapide, mais j'ai essayé et ça ne fonctionne pas.

Le principe de contrôleur est de dissocier les commandes, des vues et des données.
Un contrôleur principal fait redirige, en fonction de l'appel demandé, vers le contrôleur qui est en charge de cette fonctionnalité et ce dernier se charge de récupérer les données et de les mettre en forme pour les afficher dans des vues.
C'est le modèle MVC Modèle Vue Controleur.

Isa
Commenter la réponse de ideschamps
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 30 mars 2007 à 08:07
0
Utile
Bonjour,

il ne faut pas confondre  "un motif de conception pour le développement d'applications
logicielles qui sépare le modèle de données, l'interface utilisateur et la logique de contrôle"
( lu chez wikipedia ) et une instruction dans un langage donné et/ou les codes
utilisé dans l'application conçue avec cette méthode.

    roro a raison : window.opener.location.reload(
true); pour oublier le cache.

    >>mais j'ai essayé et ça ne fonctionne pas.

        s'il n'y a pas d'erreur de syntaxe : l'erreur est donc ailleurs.
         mais sans le texte de l'erreur, et probablement un petit extrait du code... :




<hr />



Cordialement                Bul     [mon Site]     [M'écrire]                 




<hr />
Commenter la réponse de cs_bultez
cs_roro06 732 Messages postés jeudi 2 janvier 2003Date d'inscription 29 octobre 2007 Dernière intervention - 30 mars 2007 à 09:34
0
Utile
Bonjour




petite précision : essayer avec plusieurs navigateurs, car FF et IE réagissent différemment dans le cas de rafraichissement "manuel" (par appui sur F5 par exemple) : IE réinitialise le formulaire, alors que FF conserve ce qui a déjà été saisi. (pour les autres sniffeurs, je ne sais pas (plus) trop).

Cordialement
Roro webDev
Commenter la réponse de cs_roro06
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 30 mars 2007 à 13:50
0
Utile
B
onjour...
Un autre façon de faire un reload(true) avec effacement des formulaires est
onclick="window.location.replace( document.location.href);"

;0)
Commenter la réponse de PetoleTeam
ideschamps 20 Messages postés mercredi 3 septembre 2003Date d'inscription 4 avril 2007 Dernière intervention - 30 mars 2007 à 14:11
0
Utile
Bonjour,

Merci pour vos réponses, mais j'ai essayé tout ça.
Je ne vois aucun message d'erreur, j'utilise Zend studio pour débuger.

Voici un extrait de mon code:

Dans ma page principale, j'affiche un plan de charge. Sur appui d'un bouton modifier, j'ouvre une fenêtre de la façon suivante:

    $href    = $_SESSION['s_front_ctrl']."?do="; // Nom de mon contrôleur
    $onclick  = ' onclick="javascript: return openWaiting(\'waiting.php\',\'waiting\');"';
    $formid  = 'planif_bureau';
    $imgmodif = '[# id.'\',
    \'modif_task\');" />]';

Dans cette fenêtre popup, j'affiche des données en fonction de ce qui a été posté.
Je peux ensuite modifier ces données et lorsque je valide, j'enregistre les modifs dans ma base puis je recharge ma fenêtre plan de charge et ferme celle là.

voici un bout de code qui est appelé sur validation de mon popup :

<?php
 if (isset($_GET['mvalider'])) {
     BDDconnect::Connect();
     // On récupère les valeurs postées pour les enregistrer 
     $person = new person($_GET['personid']);
     // Récupère les taches
     $nbligne = intval($_GET['nbligne']);

      // arrivé là on met à jour les tâches
      $person->update_tache($taskid, $debut1, $fin1, $vol1, $debut2, $fin2, $vol2);
  }
 } 
?>
<script language='JavaScript' type="text/javascript">
function recharge()
{
 // Fonction appelée suit à valider
 if (!window.opener.closed) {
  window.opener.location.href = window.opener.location.href;
  window.opener.location.reload(true);
  self.close();
 }
 return true;
}
</script>

Merci d'avance pour votre aide
Isa
Commenter la réponse de ideschamps
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 30 mars 2007 à 14:33
0
Utile
on progresse un peu.
il me semble que l'on n'a toujours pas toutes les billes,
    mais :

<script type="text/javascript">
function recharge()
{
 // Fonction appelée suit à valider
 if (!window.opener.closed) {
  //window.opener.location.href = window.opener.location.href;   // inutile à priori
    et pas sûr qu'il soit nécessaire de tester window.opener.closed
  window.opener.location.reload(true);
   self.close();      il arrive trop tôt ! et le close se fait avant le rafraîchissement
                            dans certains cas de figures. mettre un setTimeout
    du style setTimeout("self.close();",100) ; par exemple
 }
 return true;
}
</script>

<hr />


Cordialement        Bul     [mon Site]     [M'écrire]



<hr />
Commenter la réponse de cs_bultez
ideschamps 20 Messages postés mercredi 3 septembre 2003Date d'inscription 4 avril 2007 Dernière intervention - 30 mars 2007 à 15:12
0
Utile
J'ai essayé avec le settimeout et ça ne change rien.
J'ai ajouté le window.opener.location.href, car j'ai vu que sur un site quelqu'un disait qu'il le fallait avant le reload.

Ensuite, la création de ma form popup est la suivante :

'>

<center>


<form name='ModifTache' onSubmit="javascript : return recharge();" method="GET">

<?php


echo 'Collaborateur sélectionné : &nbsp;'.$p->surname.' '.$p->name.'

';


// Mon code d'affichage de mes champs... sur la page
?>

// Mémorise l'id de la personne pour le récupérer dans le POST
$t  = new input_hidden_w_view('edit',$p->id,"personid","personid");
echo  $t->html."\n";
// Mémorise le nom de la form appelante pour le récupérer dans le POST
$t  = new input_hidden_w_view('edit',$form,"form","form");
echo  $t->html."\n";


echo "" ;
// Bouton valider
$btn = new submit_btn_w_view("Valider","mvalider","mvalider","btn", '');
echo "\n

".$btn->html."&nbsp;&nbsp;&nbsp;&nbsp;\n" ;
echo "

</form>" ;

Isa
Commenter la réponse de ideschamps
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 30 mars 2007 à 15:43
0
Utile
>>J'ai essayé avec le settimeout et ça ne change rien.
        mais néanmoins nécessaire.
            car "chez moi" sinon : ne rafraîchit pas.
       curieux... :    une autre erreur ailleurs ?


        mais tu nous a posté ici le php.... et "quoiqu'on fait" nous,
            pour avoir le contenu des $variables et autres joyeusetés ?
          nous mettre un petit extrait du html/javascript...




>>J'ai ajouté le window.opener.location.href, ...quelqu'un disait qu'il le fallait avant le reload.
       non, non.
  
essai :

    page principale :

<script>
    var d=new Date();
    document.body.innerHTML=d;
    window.open("pop.htm","la");
</script>

    pop-up :
<script type="text/javascript">
function recharge()
{
 if (!window.opener.closed) {
  window.opener.location.reload(true);
  setTimeout("self.close();",100);
 }
 return true;
}
</script>

       



et tout baigne....

<hr />


Cordialement                Bul     [mon Site]     [M'écrire]           




<hr />
Commenter la réponse de cs_bultez
ideschamps 20 Messages postés mercredi 3 septembre 2003Date d'inscription 4 avril 2007 Dernière intervention - 30 mars 2007 à 16:04
0
Utile
Voici mon code HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Modification des Tâches</title>
<style>
* {margin:1px; padding:Opx}
#main {margin-top:4px; color:#333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px}
input { margin:0px; padding:0px; border: 1px solid #999; background-color: #EEE; width:150px; height:15px; color: #333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; text-align: center; align:center;}
input.small { margin:0px;padding:0px; border: 1px solid #999; background-color: #EEE; width:30px; color: #333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; text-align: center; align:center;}
input.smallreadonly { margin:0px;padding:0px; border: 1px solid #999; background-color: #EEE; width:50px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-style: italic; color: #999; text-align: center; align:center}
</style>
<script language='JavaScript' type="text/javascript">


function recharge()
{
 // Fonction appelée suit à valider
 if (!window.opener.closed) {
  window.opener.location.href = window.opener.location.href;
  window.opener.location.reload(true);
  window.setTimeout("self.close();",100);
  //self.close();
 }
 return true;
}
</script>


</head>

<center>


<form name='ModifTache' onSubmit="javascript : return recharge();" method="GET">

Collaborateur sélectionné : &nbsp;Eric





&nbsp;&nbsp;&nbsp;&nbsp;

</form>

</html>

Merci pour votre aide

Isa
Commenter la réponse de ideschamps
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 30 mars 2007 à 16:29
0
Utile
pour moi ça fonctionne... enfin avec ce qu'on a !

                    page principale :

<script type="text/javascript">
    var d=new Date();
    document.body.innerHTML+=d;
    window.open("pop.htm","ici");
</script>

                    pop-up :
    en enlevant :  window.opener.location.href = window.opener.location.href;
    donc le phénomène est ailleurs.
    en ajoutant un sur la page mère le script d'affichage de l'heure : change-t-elle ?
      

var d=new Date();    document.body.innerHTML+=d;   par exemple.




<hr />



Cordialement                Bul                 [mon Site]                 [M'écrire]



<hr />
Commenter la réponse de cs_bultez
ideschamps 20 Messages postés mercredi 3 septembre 2003Date d'inscription 4 avril 2007 Dernière intervention - 30 mars 2007 à 16:48
0
Utile
J'ai essayé ton code et ça fonctionne bien.
Le problème est que je ne rafraîchit pas uniquement le contenu d'une balise, mais toute une page qui est recalculée à partir des données de la base mysql.

Isa
Commenter la réponse de ideschamps
cs_roro06 732 Messages postés jeudi 2 janvier 2003Date d'inscription 29 octobre 2007 Dernière intervention - 30 mars 2007 à 17:02
0
Utile
Bonjour







toute une page qui est recalculée à partir des données de la base





c'est ce qu tu voulais, non ?

Cordialement
Roro webDev
Commenter la réponse de cs_roro06
ideschamps 20 Messages postés mercredi 3 septembre 2003Date d'inscription 4 avril 2007 Dernière intervention - 30 mars 2007 à 17:13
0
Utile
Bien sûr, puisque le but est de mettre à jour mon plan de charge selon les modifications effectuées depuis mon popup.
Mais le problème est qu'il ne les remet pas à jour sur le reload, il faut ensuite que je fasse un F5 pour avoir mon plan de charge correctement affiché avec mes données modifiées.

Isa
Commenter la réponse de ideschamps
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 4 avril 2007 à 19:57
0
Utile
B
onjour...
Accepte donc ta réponse elle peut en interréser d'autres ou les mettre sur la voie...
;0)
Commenter la réponse de PetoleTeam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.