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

Symfony PHP Discussion :

Comment récupérer des données envoyée par Jquery Ajax dans mon controller [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 61
    Par défaut Comment récupérer des données envoyée par Jquery Ajax dans mon controller
    Bonjour,

    je travaille sur projet et je dois faire un requête ajax et récupéré les données dans mon controlleur, j'arrive à envoyer ma requete (code 200) mais pas à récupérer mes données dans mon controlleur.

    Ma requête Ajax :
    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
     
      <script>
        $(function() {
          $("#qualitelSubmit").click(function(){
     
            let formData = $('#ajaxResquest').serialize();
          console.log(formData);
            $.post({
              url: '{{path('qualitel_application')}}',
              data: formData,
              success: onSuccess,
              error: onError,
            });
          });
     
        });
        function onSuccess(data) {
    			console.log('good');
        }
        function onError() {
          alert('Une erreur a été détectée');
        }
      </script>
    mon controller :
    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
    /**
         * @Route("/application",
         *     name="qualitel_application"
         * )
         * @param EntityManagerInterface $em
         * @param ToolService $toolService
         * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
         */
        public function applicationEntranceAction(EntityManagerInterface $em, ToolService $toolService, Request $request, CalculService $calcul)
        {
            if (!$this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
                return $this->redirectToRoute('qualitel_dashboard');
            }
     
            $qualitelTool = $em->getRepository(Tool::class)->findOneBy(['slug' => 'qualitel']);
            $em = $this->getDoctrine()->getManager();
     
            $t1 = $request->request->get('formData');
            var_dump($t1);
            exit;
            return $this->render('ABCIngQualitelBundle:Default:application.html.twig', [
                'qualitelTool' => $qualitelTool,
     
     
            ]);
        }
    Auriez-vous une méthode à m'expliquer, svp ?

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $t1 = $request->request->get('formData');
    bonjour,
    cela suppose que t'as bien un champ appelé formData dans ton formulaire.Je pense que tu veux récupérer tous les champs. Pour récupérer tous les champs POST du formulaire il te faut utiliser la méthode all() comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $t1 = $request->request->all(); // équivalent à $_POST
    Après une autre problématique, quoi qu'elle n'est pas à l'origine de ton erreur, est que le rendu rendu et le traitement du formulaire sont effectués par une seule méthode (applicationEntranceAction). Dans ce cas il faut distinguer quand est-ce que t'affiche le formulaire et quand est-ce que tu traites ce formulaire avec ajax.

    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
     
    /**
         * @Route("/application",
         *     name="qualitel_application"
         * )
         * @param EntityManagerInterface $em
         * @param ToolService $toolService
         * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
         */
        public function applicationEntranceAction(EntityManagerInterface $em, ToolService $toolService, Request $request, CalculService $calcul)
        {
            if (!$this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
                return $this->redirectToRoute('qualitel_dashboard');
            }
     
            $qualitelTool = $em->getRepository(Tool::class)->findOneBy(['slug' => 'qualitel']);
            $em = $this->getDoctrine()->getManager();
     
         // requête ajax reçue, on effectue le traitement puis on rend la reponse en Json au client
           if( $request->isXmlHttpRequest()){
                $t1 = $request->request->all(); // tableau des champs POST
               //var_dump($t1);
              // exit;
     
                return new \Symfony\Component\HttpFoundation\JsonResponse( $t1);
            }
     
            return $this->render('ABCIngQualitelBundle:Default:application.html.twig', [
                'qualitelTool' => $qualitelTool,
     
     
            ]);
        }
    côté JS :
    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
     
     
      <script>
        $(function() {
          $("#qualitelSubmit").click(function(e){
          e.preventDefault() ;
     
            let formData = $('#ajaxResquest').serialize();
          console.log(formData);
            $.post({
              url: "{{path('qualitel_application')}}",
              data: formData,
              success: onSuccess,
              error: onError,
            });
          });
     
        });
        function onSuccess(data) {
    			console.log('good');
        }
        function onError() {
          alert('Une erreur a été détectée');
        }
      </script>

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 61
    Par défaut
    Après avoir essayé de comprendre ta réponse, je ne crois pas avoir tout capté, en revanche, cela m'a bien aidé j'ai un retour 200 et mes valeurs dans le profiler en POST parameters, après ça au niveau de la condition j'ai compris mais après je bloque. j'aimerai vérifier si je suis bien rentrer dans mon if et exploiter mes valeurs pour faire des calculs et renvoyer un resultat

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    je voulais dire que cette instruction $t1 = $request->request->get('formData'); est identique à $t1 = $_POST['formData'];, ça laisse supposer que t'appelais un champ nommé formData qui n'existe pas dans ton formulaire.De ton code, j'en déduis que ton but était celui de récupérer tous les champs du formulaire d'où l'appel à la méhtode $t1 = $request->request->all() évoquée dans mon précédent message.
    après ça au niveau de la condition j'ai compris mais après je bloque. j'aimerai vérifier si je suis bien rentrer dans mon if et exploiter mes valeurs pour faire des calculs et renvoyer un resultat
    Le bloc if se termine par un return new \Symfony\Component\HttpFoundation\JsonResponse( $t1);. Donc si tu y entres tu devrais reçevoir la réponse en json du côté de JS(notamment la function success ajax). Or ta fonction sucess Ajax se contente juste d'afficher 'good'.Après il faut déboguer la fonction success de Ajax pour afficher la réponse retournée par le serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function onSuccess(data) {
      console.log('good'); // pas pertinent pour afficher la réponse
      console.log(data);	// <- ici tu affiches vraiment la réponse en json retournée par	le serveur
        }
    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
     
     
    /**
         * @Route("/application",
         *     name="qualitel_application"
         * )
         * @param EntityManagerInterface $em
         * @param ToolService $toolService
         * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
         */
        public function applicationEntranceAction(EntityManagerInterface $em, ToolService $toolService, Request $request, CalculService $calcul)
        {
            if (!$this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
                return $this->redirectToRoute('qualitel_dashboard');
            }
     
            $qualitelTool = $em->getRepository(Tool::class)->findOneBy(['slug' => 'qualitel']);
            $em = $this->getDoctrine()->getManager();
     
         // requête ajax reçue, on effectue le traitement puis on rend la reponse en Json au client
        // ceci est optionnel: une fois dans le if il est important de valider les données avant tt traitement et de retourner la réponse adaptée( données valides ou données non valides)
           if( $request->isXmlHttpRequest()){
                $t1 = $request->request->all(); // tableau des champs POST
                //récuperer les variables POST
                // $t1['nom'] ,   $t1['prenom'] ,   $t1['adresse'] ...
               // puis faire traitement souhaité tel que ajouter les données en base
               //var_dump($t1);
              // exit;
     
                return new \Symfony\Component\HttpFoundation\JsonResponse( $t1);
            }
     
            return $this->render('ABCIngQualitelBundle:Default:application.html.twig', [
                'qualitelTool' => $qualitelTool,
     
     
            ]);
        }

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 61
    Par défaut
    Merci, pour tes réponses avec persévérance, j'ai réussi à faire ma requete ajax, j'ai fais une autre méthode et j'ai fais ma requete pointé vers cette méthode et ça fonctionne bien j'ai accès a mon array.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /**
         * @Route("/application/calcul_qualitel",
         *     name="qualitel_calcul"
         * )
         * @param EntityManagerInterface $em
         *
         * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
         */
    public function getCalcul(Request $request, EntityManagerInterface $em) {
          $em = $this->getDoctrine()->getManager();
          $qualitelData = $request->request->all();
    }
    Ajax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      $("#qualitelSubmit").on('click', function(e){
            e.preventDefault();
            let formData = $('#ajaxResquest').serialize();
              $.post({
                url: '{{path('qualitel_calcul')}}',
                data: formData,
                dataType: 'json',
                success: onSuccess,
                error: onError,
              });
          });

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/07/2017, 08h18
  2. Réponses: 0
    Dernier message: 31/10/2013, 15h45
  3. [AJAX] json recuperer des donneés envoyé par php
    Par karimphp dans le forum AJAX
    Réponses: 1
    Dernier message: 14/05/2010, 11h13
  4. [AJAX] encodé des donnés envoyé par POST
    Par stc074 dans le forum AJAX
    Réponses: 2
    Dernier message: 19/07/2009, 18h00
  5. Comment récupérer des données de Outlook Express ?
    Par frenchsting dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 29/04/2005, 11h07

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