I would like to send a mail with PHP, but the data are in Jquery, so I use Ajax.
The mail is sent, but I have the alert("Fail") and I don't know why ^^ jqXHR.responseText is empty and textStatus = "error" ...
I get all the data of my forms like this :
// Récupération de TOUS les élements DES formulaires
var lesChamps = $(".frm_etape input[type='text'], .frm_etape input[checked], .frm_etape input[type='checkbox'], .frm_etape select, .frm_etape textarea");
// Message qui contiendra les données que l'on passera au script PHP
var message = "";
// On empêche les submit de s'afficher dans le mail
$(lesChamps).attr("type", "submit").replaceWith("\n\n");
// Parcours des champs des formulaires
$(lesChamps).each(function(){
message += $(this).attr("name") + " : " + $(this).val() + "\n\n";
});
/* Requête Ajax */
$.ajax({
method: "POST",
url: "traitement.php",
data: { message }
})
/* Si succès */
.done(function() {
$(".succes").animate().css("display", "block");
alert("Ok");
// On attends 3,5 secondes puis on rafraichi la page
//setTimeout(function(){location.reload();}, 3500);
})
/* Si échec */
.fail(function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
alert("FAIL");
});
And this is traitement.php :
mail("r.v@a.com", 'Nouveau devis', $_POST['message']);
The mail is correctly sent, but always have the alert("FAIL") ! And the responseText is an empty string
EDIT : In the fail() I wrote :
console.log(errorThrown.stack);
And this is the result : {readyState: 0, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function, …}
I found the solution ! Just add an e.preventDefault(); before my code !