dno a écrit :
j'aimerai savoir si tout peux se passer dans la même page. C 'est à dire au moment ou les champs texte sont remplis et que l'on clique sur envoi cela appelle une autre page avec le lien de retour et le message "envoi réussi" mais peut faire la même chose dans la page d'origine sans faire appel à une deuxième page
Oui tu peux, c'est ce que je t'ai proposé plus haut :
Utilise les options de la fonction ajax :
- beforeSend : Avant l'envoi de l'ajax -> Affiche div "beforeSend" et cache "formulaire"
- error : Echec de l'envoi de l'ajax -> Affiche div "erreurReseau" puis affiche formulaire
- success : succès de l'ajax
-> si mail partis : Affiche div "success"
-> si mail pas partis : Affiche div "erreurMail"
-complete : Exécuter à la fin de l'ajax (qq soit echec ou succès) -> Réaffiche ton formulaire avec une fonction qui s'éxécute au bout de 3secondes par exemples
<form id='formulaire'>
//ton formulaire
</form>
<div id='beforeSend'>Envoi du mail, merci de patienter</div>
<div id='erreurReseau'>Erreur réseau, merci de rééssayer</div>
<div id='success'>Mail envoyé, merci de votre confiance</div>
<div id='erreurMail'>Erreur dans l'envoi du mail, merci de rééssayer</div>
Dans ta page php :
if(mail($to, $subject, $message, $headers)){
echo 'ok';
} else {
echo 'nok';
}
Ta fonction ajax :
$.ajax( {
url: contactForm.attr( 'action' ) + &amp;quot;?ajax=true&amp;quot;,
type: contactForm.attr( 'method' ),
data: contactForm.serialize(),
error: function () {
$('#beforeSend').hide();
$('#erreurReseau').show();
},
beforeSend: function(){
$('#formulaire').hide();
$('#beforeSend').show();
},
success: function(msg){
if(msg == 'ok'){
$('#beforeSend').hide();
$('#success').show();
} else {
$('#erreurMail').show();
}
},
complete: function(){
setTimeout(function(){
$('#formulaire').show();
},3000);
}
});
Je t'invite a regarder la doc de la fonction
Ajax de jquery pour bien comprendre les options de celle-ci.
C'est du code fait à la va vite sur le forum donc pas de copier/coller!
Adapte le à ta page.
En espérant t'avoir aider