Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de réponse d'une promesse

promesse Fetch

Sujet résolu
    21 novembre 2021 à 11:44:21

    Que la paix soit sur vous, bonsoir tout le monde,

    Bon voila mon problème, j'ai un formulaire d'email et de mot de passe pour se connecter au compte en PHP, et j'ai mis du java script pour se connecter sans recharger la page : 

    const form = document.getElementById('connect_form');
    
    form.addEventListener('submit', function(event){
       
        event.preventDefault();
        const formattedFormData = {
            email: this.email.value,
            password: this.password.value
        };
        postData(formattedFormData);
    });
    
    
    
    async function postData(formattedFormData){
       
        const response = await fetch(
            'index.php?page=MemberConnect',
            {
                method: 'POST',
                
                body: JSON.stringify(formattedFormData)
            }
        );
        const data = await response.json();
           
        console.log(response.email_error);
    
    }

    quand je remplis les cases tout marche bien et le compte s'ouvre grace au session de php, mais je reçois toujours l'erreur suivante : 

    Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

    si j'ai bien compris c'est une promesse non résolu mais le compte se connecte normalement, veuillez m'aider SVP.

    Est ce que c'est du parce que la page à la quelle j'envoie les données est appelée en require par PHP ? et mon deuxieme problème c'est que je reçois pas les variables de retours de la part de la page php (voici la page php qui reçoit le fetch :

    <?php
    use Model\Frontend\MemberConnect\MemberConnectModel;
    
    $data = json_decode(file_get_contents('php://input'), true);
    if (isset($data['email']) AND isset($data['password']))
    {
        $connect_manager = new MemberConnectModel;
        $connect_manager->email = $data['email'];
        $connect_manager->psw = $data['password'];
        $connect_manager->connect();
        
        $reponse = array(
            'email_error'		=>	'',
            'password_error'	=>	''
        );
        echo json_encode($reponse);
    }
    else
    {
        $reponse = array(
            'email_error'		=>	'il faut remplire les cases',
            'password_error'	=>	'il faut remplire les cases'
        );
        echo json_encode($reponse);
        
    }

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2021 à 13:43:21

      Salut,

      Ça :

      await response.json();

      ça revient à faire ça :

      JSON.parse(await response.text());

      Dans ton cas, le navigateur te dit qu'il n'est pas parvenu à reconnaitre le contenu de ta réponse comme du JSON (donc au niveau du JSON.parse()). Il est donc probable que tu ais une erreur avec ce qui est renvoyer coté serveur.

      Tu peux le contrôler de cette façon :

      console.log(await response.clone().text()); // On clone la réponse pour éviter de consommer l'original avant de la récupérer sous forme de texte dans la console.
      const data = await response.json();

       Maintenant, vérifies que ce qu'il y a dans la console correspond bien à ce que tu attends.

      -
      Edité par BrainError 22 novembre 2021 à 13:44:19

      • Partager sur Facebook
      • Partager sur Twitter
        22 novembre 2021 à 15:10:23

        Merci mon frère, je viens de résoudre le problème.
        • Partager sur Facebook
        • Partager sur Twitter
          22 novembre 2021 à 15:15:44

          « Merci mon frère, je viens de résoudre le problème. »

          Et c'était quoi ? Merci

          • Partager sur Facebook
          • Partager sur Twitter
            23 novembre 2021 à 11:44:43

            Bonjour.

            « Et c'était quoi ? Merci »


            Le problème venait du traitement côté PHP qui renvoyait du text/html que le navigateur n'arrivait du coups pas à parsé en JSON.

            Tu peut re lire le post ici

            • Partager sur Facebook
            • Partager sur Twitter

            suggestion de présentation.

            Problème de réponse d'une promesse

            × 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