11485 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,
Je suis bloqué voilà 2 jours.
J'ai un site en intranet qui gère une partie des fonctionnalités de ma boîte (agence de voyages). J'ai développé sur ce site tout un tas de fonctionnalités, construction de circuits, devis au centième de seconde, etc... Actuellement, j'ai tout un tas de formulaires qui s'ouvrent dans de petits cadres dans les diverses pages mais ça commence à devenir lourd et peu agréable pour la navigation.

J'ai donc imaginé que pour certains formulaires, je les ouvrirais en popup, et après validation, avec js je raffraichirais la page parente et ensuite la popup se fermerait automatiquement...
Mais voilà je suis bloqué...

1.- Ouvrir la popup, pas de souci.
2.- Traiter le formulaire validé, ok mais c'est là où ça bloque car en fait la popup se ferme avant que le formulaire ne puisse se traiter... Smiley lol
3.- Raffraichir la page parente, ok
4.- Fermer le popup, ok...

J'ai essayé d'envoyer les données à la page paente et là pas de souci, je peux traiter mon formulaire mais le souci est qu'en cas d'actualisation de la page involontaire on risque de revalider le formulaire (double traitement) donc l'optimum serait que le formulaire soit validé sur la popup et qu'ensuite celle-ci raffrachisse la page mère et se ferme...
Voici mes scripts d'essai:
Premièrement ma page mère (parente)
<?php
//	Toutes les infos concernant le Header
include '../../includes/config.jun.php';
include '../../includes/infos_header.jun.php';

if(empty($id_region))
{
$id_region=2;
}
?>
<script type="text/javascript">
window.name="maman";
</script>
<html>
<title>Fenetre Mere</title>
<h1>Page mère</h1>

<?php
$requete=' SELECT id_ville, nom_ville FROM villes WHERE id_region='.$id_region.' ORDER BY nom_ville';
$villes=query($requete, $connect);
$i=0;
while($donnees=mysql_fetch_assoc($villes))
{
$id_ville[$i]=$donnees['id_ville'];
$nom_ville[$i]=$donnees['nom_ville'];
++$i;
}
echo '<ul>';
foreach($id_ville as $key => $value)
{
echo '<li>'.$key.': '.$nom_ville[$key].'</li>';
}
echo '</ul>';

echo '<p><a href="popup.php" onclick="window.open(\'popup.php?form_inc=sum_ville&amp;id_region='.$id_region.'\', \'Popup\', config=\'height=400, width=400, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no\'); return false;">
Ajouter une ville</a></p>'
?>
</html>


Et ma popup
<?php
//	Toutes les infos concernant le Header
include '../../includes/config.jun.php';
include '../../includes/infos_header.jun.php';

$id_region=$_GET['id_region'];

if($_POST['insert_ville']==1 AND !empty($_POST['insert_nom_ville']))
{
$requete=' INSERT INTO villes (nom_ville, id_region, validation_ville) VALUES ('.Insert($_POST['insert_nom_ville']).', '.Insert($_POST['id_region']).', 1)';
$insert_ville=query($requete, $connect);
}
?>

<html>
<title>Fenetre Popup Fille</title>
<script type="text/javascript">

// fonction qui raffraichit la fenêtre mère et ferme la popup (activé au submit)
function refreshParent() {
  window.opener.location.href =window.opener.location.href;

  if (window.opener.progressWindow)

 {
    window.opener.progressWindow.close()
  }
window.close();
}

</script>
<h1>Ajouter une ville</h1>
<form method="post" action="popup.php" onSubmit="refreshParent()">
<input type="hidden" name="insert_ville" value="1" />
<input type="hidden" name="id_region" value="<?php echo $_GET['id_region']; ?>" />
<p>Ville : <input type="text" name="insert_nom_ville" /></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
</html>


J'ai essayé tout un tas de trucs mais sans succès, je suis sûr qu'en fait c'est hyper facile... mais javascript, je commence à m'y plonger mais c'est pas encore mon truc... Une idée?
Modifié par djkori (28 Apr 2011 - 18:03)
Bonjour,
J'ai finalement trouvé tout seul comme un grand Smiley cligne Smiley cligne
Donc en gros il suffit non pas d'activer la fonction refreshParent() au submit mais au onLoad dans la balise <body> au rechargement de la popup si la requête a été un succès. Si celle-ci est un succès on crée une variable $submit=TRUE, si cette variable est TRUE on affiche <body onLoad="refreshParent()"> et le tour est joué, sinon (premier chargement) on affiche simplement <body>... Smiley cligne Smiley cligne
J'espère que ça pourra servir à quelqu'un... Smiley smile

[Edit] Comment je fais pour marquer ce topic en résolu?
Modifié par djkori (28 Apr 2011 - 18:04)
Bonjour djkori,

Merci pour ta contribution.

En revanche, j'ai analysé ton code initial et compris ton probléme.

Je rame avec exactement le meme probléme que toi.

Mon objectif est simple :

J'ai une page mére contenant un formulaire.

Cette page mere, via un bouton, ouvre un popup qui propose une liste de choix issue de l'execution d'une requete SQL.

Jusque là tout va bien. Le popup s'ouvre, la liste s'affiche, la page mere reste en arriere plan.

Mais dés que je valide le formulaire ma page mere se réaffiche dans le popup !

Tu semble avoir trouver une solution avec body onload...

Pourrais-tu poster ton code final (qui marche) ?

Merci.