IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

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


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 30
    Par défaut Ouvrir une nouvelle fenêtre "perd" les données passées en POST
    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 :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <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 :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form id="emprunt_{{ Emprunt.Numero }}" target='_blank' method="post" action="{{ path('EnvoiMail') }}" action="{{ path('EnvoiMail') }}" onsubmit="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>

    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 !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    De mémoire, il faut passer par une bidouille abominable de création de form ou d'iframe en mettant cette nouvelle fenetre en target ...
    Il serait peut être plus simple de faire un ajax ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 30
    Par défaut
    Bonour SpaceFrog !
    Merci pour votre réponse, mais je bloque toujours :
    J'ai fait une requête ajax, très bien, elle fonctionne. Mais je n'arrive toujours pas à faire passer les infos dans une nouvelle fenêtre.
    En gros ce que je voudrais, c'est qu'après le traitement, une fenêtre s'ouvre en me disant "le mail suivant a bien été envoyé", avec le contenu du mail.

    J'ai essayé plusieurs choses pour réussir à ouvrir le nouvel onglet avec les données passées par ajax, mais je n'arrive à rien. Je pensais qu'en rajoutant cette ligne window.open('{{ path('EnvoiMail') }}');, cela marcherait, mais non, aucune donnée n'est passée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <script type="text/javascript">
              var ajaxPOST = function(url, data, callback, timeout) {
                var req = new XMLHttpRequest();
                req.open('POST', url);
     
                if(timeout !== null) {
                  req.timeout = timeout;
              }
     
              req.addEventListener('load', function () {
                if (req.status >= 200 && req.status < 400) {
                      callback(this.responseText)
                  } else {
                      console.error(req.status + " " + req.statusText);
                  }
              });
              req.addEventListener('error', function () {
                  console.error('La requête a recontré un problème');
              });
     
              if(timeout !== null) {
                req.addEventListener('timeout', function () {
                    console.error('timeout');
                });
              }
              req.send(data);
              window.open('{{ path('EnvoiMail') }}');
            }
     
            var formData = new FormData();
            formData.append('CodeBarre', '{{ Emprunt.CodeBarre }}');
            formData.append('Titre', '{{ Emprunt.Titre }}');
            formData.append('NomAuteur', '{{ Emprunt.NomAuteur }}');
            formData.append('DateDuPret', '{{ Emprunt.DateDuPret }}');
            formData.append('DateDuRetour', '{{ Emprunt.DateDuRetour }}');
     
            </script>
     
            <a href="#" onclick="ajaxPOST('{{ path('EnvoiMail') }}', formData, function(res) {console.log(res);}); return false" >Impression de la relance</a>
    J'ai lu ici qu'a priori on ne peut pas ouvrir de nouvelles fenêtres avec ajax. Est-ce vrai ? Dans ce cas, je ne comprends pas comment ajax devrait m'aider ?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 30
    Par défaut
    Je complète en disant que c'est de la pure curiosité, je ne comprends pas pourquoi les données POST ne sont pas passées à cause de l'ouverture d'une nouvelle fenêtre.
    Je sais que je peux passer les données en GET, là ça marchera, ou même de demander en traitement de recalculer le résultat affiché sur la page, mais cette fois-ci pour l'envoyer par mail.

    Je voulais éviter de rechercher à nouveau toutes les informations nécessaires à l'envoi du mail alors que je viens juste de les afficher, c'est tout ! Et je n'avais pas très envie de les passer en GET, mais bon, j'ai pas le choix si ?

  5. #5
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 691
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 691
    Par défaut
    je pense que ce que SpaceFrog proposait, c'est de ne pas ouvrir une vraie fenêtre mais d'envoyer la requête POST avec ajax et ensuite afficher la réponse dans une popup.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Oui sachant que les données post ne survivent pas à un window.open, l'idée était de rester dans la même fenêtre.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#][Débutant]Ouvrir une nouvelle fenêtre en fermant l'ancienne
    Par neuromencien dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/04/2011, 09h20
  2. Réponses: 17
    Dernier message: 31/08/2006, 14h50
  3. ouvrir une nouvelle fenêtre dans une taille déterminé
    Par lnikolanta dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/09/2005, 15h26
  4. Ouvrir une nouvelle fentre en grand ?
    Par Sylk dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 15/09/2005, 13h14
  5. [ShellExecute] ouvrir une nouvelle fenêtre ie
    Par sony351 dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/11/2004, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo