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

AJAX Discussion :

Réponse AJAX avec PHP-MVC


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 6
    Par défaut Réponse AJAX avec PHP-MVC
    Bonjour, je viens solliciter votre aide, je souhaite récupérer le dernier commentaire insérer pour pouvoir l'afficher sans recharger ma page. Mais sa me retourne toujours NULL, sauf que lorsque je regarde dans la partie network dans l'onglet response ma réponse est présente.

    Routeur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ($_GET['url'] === 'postComment') {
                        if (isset($_GET['postId']) AND !empty($_GET['postId'])) {
                            if (!empty($_POST['author']) AND !empty($_POST['contents'])) {
                                $this->_frontController->postComment($_GET['postId'], $_POST['contents'], $_POST['author']);
                            }

    Contrôleur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public function postComment($postId, $contents, $author)
        {
            $comments = $this->_comment->addCommentFromPost($postId, $contents, $author);
            echo json_encode(require './View/displayCommentsView.php');
            // require './View/displayCommentsView.php';
        }

    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
    document.getElementById("commentForm").addEventListener("submit", function (event) {
     
    	event.preventDefault(); 
     
    	let dataForm = new FormData(this);
     
    	const xhr = new XMLHttpRequest();
    	xhr.onreadystatechange = function () {
    		if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
    			console.log(this);
    			let result = this.response;
    			comments(result);
    		}
    	};
    	xhr.open("POST", this.action, true);
    	xhr.responseType = "json";
    	xhr.send(dataForm);
    });
     
     
    function comments(resultAjax) {
    	let div = document.getElementsByClassName("displayComments");
    	console.log(resultAjax);
     
    }

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    Citation Envoyé par Smlh.dev
    Mais sa me retourne toujours NULL, sauf que lorsque je regarde dans la partie network dans l'onglet response ma réponse est présente.
    Les variables dans l'onglet network sont celles qui ont été envoyées et pas reçues, donc la première étape est de vérifier le scipt js et utiliser des console.log et surtout voir l'onglet console aussi.

    Modifies un peu La ligne 10 du code js console.log("Response ajax :",this.response);, ça donne quoi ?

    Après quand je vois ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $comments = $this->_comment->addCommentFromPost($postId, $contents, $author);
     echo json_encode(require './View/displayCommentsView.php');

    Je me demande pourquoi le require dans json_encode ? et quel est le contenu de displayCommentsView.php ?

    J'imagine que le traitement de addCommentFromPost() ressemble un peu à ceci :
    • exécution de la requête d’insertion...
    • récupérer le dernier id inséré...
    • si tout est bon, récupérer l'objet inséré en fonction du dernier id et le retourner avec return array("id"=>"id du comment","titre"=>"titre comment","date"=>"date de comment");, sinon retourne une erreur genre return array("erreurInsert"=>"Aucune insertion ....");


    Donc $comments doit être l'objet qui vient d'être insérer par la méthode addCommentFromPost() (ou une erreur) pour qu'ensuite le passer en paramètre dans json_encode directement comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       echo json_encode($comments);
    .

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 6
    Par défaut
    Bonjour, Merci pour ta réponse.

    Pour le console log à la ligne 10 du code JS ça m'affiche NULL.

    Mon displayCommentFromPost ressemble à ceci :
    Code php : 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
     
    <?php
     
    while($comment = $comments->fetch()) {
     
    ?>
        <div class="displayComments">
            <p class="author"><?= htmlspecialchars($comment['pseudo']); ?></p>
            <p class="content"><?= htmlspecialchars($comment['contents']); ?></p>
            <p class="created_at"><?= htmlspecialchars($comment['creation_date']); ?></p>
        </div>
    <?php
     
    }
     
    $comments->closeCursor();
     
    ?>

    et le addCommentFromPost à ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public function addCommentFromPost($postId, $contents, $author) {
            $pdo = $this->getConnection();
            $result = $pdo->prepare('INSERT INTO comments(pseudo, contents, id_post, creation_date) VALUES(:pseudo, :contents, :id_post, NOW())');
            $result = $result->execute(array(
                'pseudo' => $author,
                'contents' => $contents,
                'id_post' => $postId
            ));
            $commentId = $pdo->lastInsertId();
            $comment = $pdo->prepare('SELECT id,pseudo,contents,creation_date FROM comments WHERE id= ?');
            $comment->execute([$commentId]);
            return $comment;
     
        }

    Lorsque je fais un echo json_encode($comments); j'ai toujours null dans la console et dans le network ça m'affiche ma requête SELECT.

    le require dans le json_encode que j'ai effectué c'était pour récupérer la div que contient mon fichier displayCommentsView.php pour pouvoir l'insérer avec javascript par la suite.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    tu te complique la tâche plus qu'elle l'est, commence d'abord par modifier la dernière partie du code de la méthode addCommentFromPost :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function addCommentFromPost(...){
    ....
    $commentId = $pdo->lastInsertId();
    $comment = $pdo->prepare('SELECT id,pseudo,contents,creation_date FROM comments WHERE id= ?');
    $comment->execute([$commentId]);
    return $commentId>0
             ?$comment->fetch(PDO::FETCH_ASSOC)
             :array("erreurInsert"=>"Aucune insertion n'a été effectuée.");
    }

    Après tu modifies la méthode postComment comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public function postComment($postId, $contents, $author)
        {
            $comments = $this->_comment->addCommentFromPost($postId, $contents, $author);
            echo json_encode($comments);
        }

    Puis tu manipules les données au niveau js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    xhr.onreadystatechange = function() {
    	if (this.readyState == 4) { // `DONE`
    		if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
    			if(this.response) {
                                 console.log('Succès :',this.response);
                                 comments(this.response);
                            }
    			else console.error("Une erreur s'est produite lors de l'insertion.");
    		}
    	}
    }
    Que vois-tu dans la console du navigateur après ces modifications ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 6
    Par défaut
    Bonjour,

    Ah oui d'accord merci beaucoup là j'ai bien le retour dans ma console avec le dernier commentaire insérer et je comprends mieux ou été mon erreur.

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

Discussions similaires

  1. Interroger AJAX avec PHP
    Par Identifiant17 dans le forum AJAX
    Réponses: 2
    Dernier message: 09/12/2019, 21h08
  2. Datatables avec PHP MVC
    Par madengue dans le forum jQuery
    Réponses: 0
    Dernier message: 17/07/2018, 19h43
  3. Réponse ajax via php k.o
    Par amine2208 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/10/2017, 13h32
  4. Réponses: 2
    Dernier message: 20/05/2016, 17h06
  5. [AJAX] ajax avec php
    Par gomrinho dans le forum AJAX
    Réponses: 2
    Dernier message: 30/04/2010, 15h30

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