1

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 !

Emilien
  • 2,701
  • 4
  • 15
  • 25

0 Answers0