Ajax qui ne fonctionne pas

Résolu
Bonjour,

J'utilise Ajax pour qu'une personne ne puisse être inscrite sur mon site que si l'adresse mail qu'elle donne n'est pas encore dans la base de donnée.

Voici mon contrôleur :
if (isset($_POST['checkMail'])) {
    session_start();
    include_once '../models/dataBase.php';
    include_once '../models/user.php';
    $mailUnique = new user();
    $mailUnique->mail = strip_tags($_POST['checkMail']);
    $checkMail = $mailUnique->checkMailUnique();
    if ($checkMail !== false) {
        if ($checkMail == 1) {
            $_SESSION['formError'] = true;
        }
        echo json_encode($checkMail);
    }
}


Voici mon script JS :
$('#errorCheckMailUnique').css('display', 'none');
function checkMailUnique() {
    $.post(de donnée ou non
            '../../controllers/addUser-Controller.php',
            {
                checkMail: $('#mail').val()
            },
            // On récupère les résultats du controller
            function (checkMailResult) {
                // Si on retrouve une addresse mail dans la base de donnée, alors on affiche un message d'erreur
                if (checkMailResult === 1) {
                    $('#errorCheckMailUnique').css('display', 'block');
                    $('#submitRegistrer').attr('disabled', 'disabled');
                        alert('1');
                } else if (checkMailResult === 0) {
                    $('#errorCheckMailUnique').css('display', 'none');
                    $('#submitRegistrer').removeAttr('disabled', 'disabled');
                        alert('2');
                }
            },
            'JSON'
            );
};


Voici mon modèle :
    public function checkMailUnique() {
        $queryCheckMail = 'SELECT COUNT(`mail`) AS countMail '
                             . 'FROM `'.self::prefix.'user`'
                         . 'WHERE `mail` = :mail';
        $checkMailUnique = $this->db->prepare($queryCheckMail); PDO:: est une constante
        $checkMailUnique->bindValue(':mail', $this->mail, PDO::PARAM_STR);
        if ($checkMailUnique->execute()) {
            $checkMailUniqueResult = $checkMailUnique->fetch(PDO::FETCH_OBJ);
            return $checkMailUniqueResult->countMail;
        } else {
            return false;
        }
    }


EDIT : Correction des balises de code ( Ajout du langage afin d'avoir la coloration syntaxique ! ) (jordane)

Mon script JS n'a pas l'air d'être chargé puisque que je lui ajoute le code suivant :
$('button').css('background-color', 'red');
cette ligne de code ne fonctionne pas. Alors que cette même ligne dans un autre script JS fonctionne. Pourtant j'ai bien ajouté
<script src="assets/js/checkMailUnique.js" type="text/javascript"></script>
dans la balise <head>

1 réponse

  1. Modérateur
    Bonjour,

    Lorsque l'on fait du Javascript (et ou ajax) il faut toujours commencer par regarder dans la CONSOLE du navigateur si il n'y a pas des erreurs.
    (pour l'ajax, penser à activer l'option sur certains navigateurs comme chrome (xhr) )
    ( personnellement, pour débuguer, je préfère utiliser firefox... )

    Quoi qu'il en soit, une de tes lignes de code me parait étrange.....
    $.post(de donnée ou non
                '../../controllers/addUser-Controller.php',
                {


    PS: A l'avenir, merci de préciser le LANGAGE dans les balises de code afin d'avoir la coloration syntaxique et l'indentation du code (j'ai édité ton message pour les y mettre).
    Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

    0
    1. Merci de ta réponse :).

      j'ai résolu le problème.

      Il m'a semblé avoir précisé le langage dans les balise. J'ai sûrement fait une erreur de manipulation.
      0
    2. Merci de ta réponse :)
      J'ai résolu le problème.

      Il m'a semblé avoir précisé le langage dans les balises. J'ai sûrement fait une erreur de manipulation.
      0