Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony (5) & Ajax / isXmlHttpRequest false

Je bloque avec isXmlHttpRequest qui est toujours false

Sujet résolu
Anonyme
    21 janvier 2020 à 15:52:13

    Hello les codeurs ! J'ai besoin de votre aide svp :)

    Avec Symfony 5 et Javascript (vanilla).

    Le contexte : J'ai une page qui contient un formulaire pour poster des mots, et dessous la liste des mots postés.

    Tout marche bien de base, j'ai fais une requête ajax POST qui marche, les mots entrés sont bien enregistrés en BDD.

    Le problème est dans la réponse de la requête.

    Exemple: Si le formulaire est invalide, je veux avoir en réponse juste le formulaire et ses erreurs.

    Pour ça, j'utilise la méthode isXmlHttpRequest() pour demander de me retourner seulement le formulaire si la requête est un xhr.

    if ($request->isXmlHttpRequest()){
     return $this->render('shiritori/_form.html.twig',[
                   'form' => $form->createView(),
                ]);
    }

    Mais voilà isXmlHttpRequest() est toujours false, donc ma condition ne marche pas.

    Pourtant j'ai bien en header de ma requete ajax X-Requested-With que demande isXmlHttpRequest() pour être true :

    xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest')

    Header qui est bien là (cf la console du navigateur) lors de la requête.

    Du coup je vois pas pourquoi isXmlHttpRequest() retourne false...
    Une idée ?

    Merci d'avance ;)

    Le controller complet :

        /**
         * @Route("/shiritori/{id}", name="shiritori_show")
         * @param Shiritori $shiritori
         * @param Request $request
         * @return Response
         */
        public function show(Shiritori $shiritori, Request $request)
        {
            $word = new Word();
            $word->setShiritori($shiritori);
    
            $form = $this->createForm(WordType::class, $word, [
                'action' => $this->generateUrl('shiritori_show', ['id' => $shiritori->getId()]),
                'method' => 'POST',
            ]);
            $form->handleRequest($request);
            if($form->isSubmitted() && $form->isValid()){
                $em = $this->getDoctrine()->getManager();
                $em->persist($word);
                $em->flush();
                $this->addFlash('success', "Le mot a bien été ajouté");
                return $this->redirectToRoute('shiritori_show',  ['id' => $shiritori->getId()]);
            }
    
            if ($request->isXmlHttpRequest()){
                return $this->render('shiritori/_form.html.twig',[
                   'form' => $form->createView(),
                ]);
            }
    
            return $this->render('shiritori/shiritori_show.html.twig', [
                'controller_name' => 'ShiritoriController',
                'shiritori' => $shiritori,
                'form' => $form->createView(),
            ]);
        }



    • Partager sur Facebook
    • Partager sur Twitter
      22 janvier 2020 à 9:18:21

      Bonjour,

      Quelques questions ou suggestions :

      - pourquoi ne pas contrôler avant l'envoi les données du formulaire ?

      - pourquoi vouloir faire, si erreur, une nouvelle requête : il existe $form->getErrors, cela ne convient pas ?

      https://symfony.com/doc/current/components/form.html#accessing-form-errors

      A+

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        23 janvier 2020 à 17:45:18

        Bon j'ai trouvé le problème et encore une fois il est dû à un défaut d'inattention de ma part....Comme d'habitude...:colere:

        J'ai juste écrit xmlhttprequest au lieu de XMLHttpRequest dans le setRequestHeader.

        • Partager sur Facebook
        • Partager sur Twitter

        Symfony (5) & Ajax / isXmlHttpRequest false

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown