Bonjour,
J'ai un petit soucis avec mon code. L'idée est simple, je veux afficher un message de succès ou d'erreur lorsque la personne souscrit à la Newsletter, le tout sans actualiser la page.
Alors le tout fonctionne si mon traitement est dans un fichier définit, par exemple 'cible.php', là tout est ok, je peux faire ma requête et renvoyer le message.
Mais dans le cas où il y a du routing, le "success:" ne fonctionne pas.
Je tiens à précisier que je suis débutant dans le dev, je me doute bien qu'il y a 1001 meilleures façon de faire, mais je fais avec ce que je peux, so keep calm :)
Le formulaire :
<div class="col-lg-12">
<form id="newsletter" action="index.php?action=subscribe-newsletter" method="post">
<input name="email" type="email" placeholder="Votre adresse email" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Votre adresse email'" required>
<button type="submit" style="cursor: pointer;" class="template-btn">M'abonner</button>
</form>
<div class="mt-5" id="newsletter-response"></div>
</div>
Mon Router :
case "subscribe-newsletter";
if(isset($_POST['email']))
{
$newsletter = new Newsletter($db);
$newsletter->subscribe($data['email']);
}
Ma Class :
public function subscribe($getemail)
{
if(isset($getemail))
{
$query = $this->db->prepare('INSERT INTO `newsletter` SET email = :email');
$query->bindvalue(':email', $getemail);
$query->execute();
return json_encode(['reponse' => true]);
}else {
return json_encode(['reponse' => false]);
}
}
AJAX :
$(document).ready(function() {
$('#newsletter').on('submit', function(e) {
e.preventDefault();
var $this = $(this);
$.ajax({
url: $this.attr('action'),
type: $this.attr('method'),
data: $this.serialize(),
dataType: 'json',
success: function(json)
{
if(json.reponse === true)
{
$('#newsletter-response').html('<div class="alert alert-success text-center" role="alert">Souscription validée !</div>');
} else {
alert('Erreur : '+ json.reponse);
}
}
});
});
});
Merci à tous :)