TL; Solución DR: cambie .val en javascript para .serializar para cualquier entrada de radio.Formulario de correo de PHP con botones de radio que usa AJAX para enviar
He estado usando this tutorial para crear un formulario que, cuando se presiona el botón Enviar, desaparece el botón y se desvanece en un mensaje de "gracias" y envía el archivo mailer.php en segundo plano. Mi formulario tiene botones de opción y no puedo entender cómo obtener el javascript para enviar el botón que se seleccionó a través de mi correo electrónico.
Aquí está el formulario HTML:
<form action="" method="" name="rsvp" id="rsvp-form">
<fieldset>
<legend>RSVP</legend>
<ol>
<li>
<input id="accepts1" class="rsvps" name="rsvps" type="radio" value="Graciously_Accepts" />
<label for="accepts1">Graciously Accepts</label>
</li>
<li>
<input id="declines1" class="rsvps" name="rsvps" type="radio" value="Regretfully_Declines" />
<label for="declines1">Regretfully Declines</label>
</li>
<li>
<input id="accepts2" class="rsvps" name="rsvps" type="radio" value="Regretfully_Accepts" />
<label for="accepts2">Regretfully Accepts</label>
</li>
<li>
<input id="declines2" class="rsvps" name="rsvps" type="radio" value="Graciously_Declines" />
<label for="declines2">Graciously Declines</label>
</li>
</ol>
</fieldset>
<div id="rsvp-wrapper">
<fieldset>
<button class="button" type="submit" value="send">RSVP!</button>
</fieldset>
</form>
<div class="success"></div>
</div>
El javascript:
<script type="text/javascript">
$(function() {
$(".button").click(function() {
var rsvps = $(".rsvps").val();
var dataString = 'rsvps=' + rsvps;
$.ajax({
type: "POST",
url: "rsvp-mailer.php",
data: dataString,
success: function() {
$('#rsvp-wrapper').html("<div class='success'></div>");
$('.success').html("<p class='italic'>Thanks!</p>")
.hide()
.fadeIn(500, function() {
$('.success');
});
}
});
return false;
});
});
</script>
Y el mailer.php:
<?php
$rsvps = $_POST['rsvps'];
$formcontent="
RSVP: $rsvps \n";
$recipient = "[email protected]";
$subject = "RSVP";
$mailheader = "RSVP \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
?>
Muchas gracias por cualquier idea que puede proporcionar.
¡Sí !, esta es la mejor manera de enviar todo el formulario en orden y luego llamar al nombre de cualquier elemento en otra página ... y mostrar el resultado como desees ... espero que esto funcione bien para ti. – Rafee
Esto devuelve los datos correctos, pero en la URL de la página, no un correo electrónico. E.G: domain.com/?rsvps=Regretfully_Declines –
Resulta que el cambio de .val a .serialize funcionó. El único pequeño problema es que en el correo electrónico dice 'RSVP: rsvps = Regretfully_Declines' ¡Gracias por su ayuda! –