Créer un formulaire sans rechargement de page avec jQuery.ajax()

Pour créer notre formulaire, nous allons créer 3 fichiers :

  1. Le fichier HTML index.html qui contiendra le formulaire
  2. Le fichier JS form-contact.js qui se charge d’exécuter une requête HTTP asynchrone (et donc d’exécuter notre fichier PHP sans changer de page)
  3. Le fichier PHP form-contact.php qui se charge de vérifier les données du formulaire, de traiter les données et de renvoyer la réponse.

Veillez à ne pas oublier d’appeler la librairie JQuery depuis votre fichier HTML, comme indiqué dans l’exemple ci-dessous. (Lire aussi : Comment inclure jQuery de manière optimisée de AlsaCréation)

Créer le formulaire sur votre fichier HTML (index.html)

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Formulaire</title>
</head>

<body>

<form id="form-contact">
 
 Nom : <input type="text" id="nom" name="nom"><br>
 Email : <input type="text" id="email" name="email"><br>
 Message : <input type="text" id="message" name="message"><br>

 <button id="form-contact-submit" type="submit">Envoyer</button>

</form>

<div id="warning"></div>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript" src="form-contact.js"></script>

</body>
</html>

Créer le traitement en Javascript et JQuery (form-contact.js)

Notez qu’avec cette méthode, vous pouvez également traiter des uploads de fichiers !

$(document).ready(function() {
     
    $('#form-contact-submit').on('click', function() {
         
        var form        = $('form').get(0);
        var formData    = new FormData(form); // Toutes les données du formualaire
        
        // Message qui s'affiche pendant le traitement du formulaire :
        $('#warning').html("Veuillez patienter pendant le traitement de votre demande") ;
         
        $.ajax({
            url: 'form-contact.php', // chemin du fichier PHP à éxécuter
            type: 'POST', 
            data: formData, // Les données
            processData: false,
            contentType: false,
             
            success: function(ret) { 
                var obj = jQuery.parseJSON(ret);
                $('#warning').html(obj.textRetour) ; // Message de confirmation ou d'erreur 
                if (obj.codeRetour == 1)
                {
					// Actions une fois le formulaire soumis avec succès
                   	// Par exemple, ici on vide les champs du formulaire :
                    $('#nom').val('') ;
                    $('#message').val('') ;
                    $('#email').val('') ;
                }
            }
        });
        return false; 
    });
});

Créer le fichier de traitement en PHP (form-contact.php)

Je ne détaille pas le traitement du formulaire en lui-même (vérification des champs obligatoires, de la validité de l’adresse e-mail, de l’envoi d’un mail à l’administrateur du site, du stockage dans la base de donnée…), mais vous pouvez inclure tous les traitements  désirés : il suffira de traiter vos valeurs $_POST (et $_FILES si vous envoyez également des fichiers).

Votre fichier doit retourner un tableau :
codeRetour = 0 en cas d’échec ou 1 en cas de succès
textRetour = le texte qui s’affichera dans la div « warning » de votre fichier HTML.

// Inclure ici votre vérification et le traitement de votre formulaire (envoi par email, stockage dans la base de donnée, etc.)

return array('codeRetour' => 1, 'textRetour' => 'Merci, votre demande a bien été prise en compte ) ; // succès

 


Si cet article "Créer un formulaire sans rechargement de page avec jQuery.ajax()" vous a aidé, si vous avez des questions ou des améliorations à proposer, n'hésitez pas à me laisser un commentaire en bas de page !
Charlie Stram,
Développeur web freelance

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *