Bonjour,
J'ai un problème de rendu avec le tutoriel "formulaire en ajax", je vous explique :
Voilà mon fichier php :

<?php
require('../bdd.php');
if(isset($_POST)){
$com = $bdd->prepare('INSERT INTO commentaire (utilisateur,article,contenu)
    VALUES (:utilisateur, :article, :contenu)');
$com->execute(array(
    'utilisateur' => $_POST'utilisateur'],
    'article' => $_POST'article'],
    'contenu' => htmlspecialchars($_POST'message'])
    ));
#header('Location: '.$_SERVER'HTTP_REFERER'].'');
echo "ok";
}
else{
    echo "Votre message est vide";
}

Et voilà mon script :

$("#formCom").submit(function(){
        $(".loader").show();
        var pseudo = $(this).find("input[name=pseudo]").val();
        var message = $(this).find("textarea[name=message]").val();

        $.post(
            "app/com.php",
            {
                pseudo: pseudo,
                message:message},
            function(data){
                $(".loader").hide();
                if(data!="ok"){
                    $(".error").empty().append(data);
                }
                else{
                    $(".comAjax header").append("Posté par <strong>" + pseudo + "<strong>");
                    $(".comAjax div p").append(message);
                    $(".comAjax").slideDown('slow');
                    $("textarea[name=message]").empty();
                }
            });

            return false;
    });

Le problème est le suivant :
Quand je laisse "return false", il m'affiche bien le nouveau message, mais ne l'insert pas dans la BDD.
Quand je l'enleve (return true) il me l'insert dans la bdd, mais appel directement le script PHP ...

Quelqu'un sait d'où cela peut il provenir ?

4 réponses


Bonsoir,
Le "return false" est là pour empêcher le navigateur web d’exécuter l’évènement par défaut qui est d'envoyer le formulaire normalement.
Donc si tu l’enlève, le javascript est exécuté plus l'envoi du formulaire par le navigateur

Oui, mais lorsque je l'enleve, je perd le partie "asynchrone" ...

Dans ta requête AJAX tu passes des données en POST (pseudo, message), mais en PHP les données attendues dans ton script sont utilisateur,article,contenu soit $_POST"utilisateur"], $_POST"article"], $_POST"message"] mais en AJAX tu envoies $_POST"pseudo"] et $_POST"message"], regardes dans firebug avec Firefox, dans l'onglet console ou réseau lorsque tu envoies ta requête AJAX il te sortira l'erreur

Si ce que tu veux, c'est faire une requête AJAX alors pour envoyer tes données à ton script tu dois faire un $.get et non un $.post