Problème de rafraîchissement d'une page parent

Résolu
ideschamps Messages postés 20 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 4 avril 2007 - 29 mars 2007 à 17:15
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 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

16 réponses

ideschamps Messages postés 20 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 4 avril 2007
4 avril 2007 à 11:57
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
3
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
29 mars 2007 à 17:29
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
0
ideschamps Messages postés 20 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 4 avril 2007
29 mars 2007 à 17:35
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
30 mars 2007 à 08:07
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 />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
30 mars 2007 à 09:34
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
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
30 mars 2007 à 13:50
B
onjour...
Un autre façon de faire un reload(true) avec effacement des formulaires est
onclick="window.location.replace( document.location.href);"

;0)
0
ideschamps Messages postés 20 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 4 avril 2007
30 mars 2007 à 14:11
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
30 mars 2007 à 14:33
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 />
0
ideschamps Messages postés 20 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 4 avril 2007
30 mars 2007 à 15:12
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
30 mars 2007 à 15:43
>>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 />
0
ideschamps Messages postés 20 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 4 avril 2007
30 mars 2007 à 16:04
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
30 mars 2007 à 16:29
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 />
0
ideschamps Messages postés 20 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 4 avril 2007
30 mars 2007 à 16:48
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
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
30 mars 2007 à 17:02
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
0
ideschamps Messages postés 20 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 4 avril 2007
30 mars 2007 à 17:13
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
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
4 avril 2007 à 19:57
B
onjour...
Accepte donc ta réponse elle peut en interréser d'autres ou les mettre sur la voie...
;0)
0
Rejoignez-nous