Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ouvrir une nouvelle fenêtre perd les données POST

Sujet résolu
13 octobre 2021 à 0:58:57

Bonjour,
J'expérimente symfony, et dans le cadre d'un projet, j'ai besoin de passer des données en méthode POST dans une nouvelle fenêtre.

Lorsque ce fais ce formulaire, qui ouvre un nouvel onglet, pas de soucis, je récupère bien mes données :

<form id="emprunt_{{ Emprunt.Numero }}" target='_blank' method="post" action="{{ path('EnvoiMail') }}">
        <input type="hidden" name="CodeBarre" value="{{ Emprunt.CodeBarre }}">
        <input type="hidden" name="Titre" value="{{ Emprunt.Titre }}">
        <input type="hidden" name="NomAuteur" value="{{ Emprunt.Auteur.Nom }}">
        <input type="hidden" name="DateDuPret" value="{{ Emprunt.DateDuPret }}">
        <input type="hidden" name="DateDuRetour" value="{{ Emprunt.DateDuRetour }}">
        <input type="submit" value="Envoyer mail">
        </form>

voici les données reçues lorsque je fais un dump($request) :

EditionController.php on line 56:
Symfony\Component\HttpFoundation\Request {#56 ▼
+attributes: Symfony\Component\HttpFoundation\ParameterBag {#100 ▶}
+request: Symfony\Component\HttpFoundation\InputBag {#107 ▼
#parameters: array:12 [▼
"CodeBarre" => "3370000451300"
"Titre" => "Le Cochon d'Hollywood"
"NomAuteur" => "Fraxler"
"DateDuPret" => "2021-04-01"
"DateDuRetour" => "2021-04-15"
]
} 


Par contre, si je rajoute ce bout de javascript (onsubmit) pour ouvrir la page de traitement dans une nouvelle fenêtre, les données passées dans le formulaire sont perdues. La page s'ouvre bien dans une nouvelle fenêtre, mais impossible de recevoir les données :

<form id="emprunt_{{ Emprunt.Numero }}" target='_blank' method="post" action="{{ path('EnvoiMail') }}" action="{{ path('EnvoiMail') }}" on-submit="window.open(this.action, 'mail', 'height=500, width=500, top=100, left=100, toolbar=no, menubar=no, location=no, resizable=no, scrollbars=no, status=no'); return false">
        <input type="hidden" name="CodeBarre" value="{{ Emprunt.CodeBarre }}">
        <input type="hidden" name="Titre" value="{{ Emprunt.Titre }}">
        <input type="hidden" name="NomAuteur" value="{{ Emprunt.Auteur.Nom }}">
        <input type="hidden" name="DateDuPret" value="{{ Emprunt.DateDuPret }}">
        <input type="hidden" name="DateDuRetour" value="{{ Emprunt.DateDuRetour }}">
        <input type="submit" value="Envoyer mail">
        </form>

(la faute dans le onsubmit est volontaire, sans ça je n'arrive pas à publier mon code ici......)

Voilà ce qui est reçu :

EditionController.php on line 56:
Symfony\Component\HttpFoundation\Request {#56 ▼
+attributes: Symfony\Component\HttpFoundation\ParameterBag {#100 ▶}
+request: Symfony\Component\HttpFoundation\InputBag {#107 ▼
#parameters: []
} 


J'ai essayé de changer tous les paramètres de onsubmit, mais je n'arrive pas à un autre résultat... Est-ce qu'il y a une explication à cela, ou une erreur de ma part ?

Merci d'avance !

-
Edité par Cellophile 13 octobre 2021 à 1:10:44

  • Partager sur Facebook
  • Partager sur Twitter
13 octobre 2021 à 7:28:55

Je pense que ton bouton fais deux choses. Il poste les données vers la page cible ( celle désignée par le paramètre action ), PUIS l'évènement submit donne lieu à l'ouverture de la page dans une autre fenêtre. Et une ouverture simple, qui ne contient pas de données post.

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2021 à 4:08:58

Bonjour, effectivement le window.open créé une nouvelle requête en ouvrant la page, une requête GET (sans envoyé les donnée du formulaire) le window.open et indépendant du formulaire, le fait de le déclenché dans le submit du formulaire ne les associe pas.

Normalement le target="_blank" que tu as mit sur ton formulaire suffit à faire ouvrir la cible du formulaire dans un nouvel onglet, et les données doivent lui être envoyé.

  • Partager sur Facebook
  • Partager sur Twitter

suggestion de présentation.

22 octobre 2021 à 18:01:57

Bonjour !

Merci pour vos explications !

J'ai résolu mon problème en ouvrant une fenêtre modale et en effectuant une requête ajax. C'est pas aussi pratique qu'une nouvelle fenêtre, puisque ça empêche de continuer à travailler sur la page, mais ça fonctionne bien !

Bonne continuation.

  • Partager sur Facebook
  • Partager sur Twitter